mirror of
https://github.com/shivammathur/setup-php.git
synced 2026-05-14 17:35:05 +07:00
Compare commits
1 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
b2f833f7d1 |
16
.eslintrc.json
Normal file
16
.eslintrc.json
Normal file
@@ -0,0 +1,16 @@
|
|||||||
|
{
|
||||||
|
"env": { "node": true, "jest": true },
|
||||||
|
"parser": "@typescript-eslint/parser",
|
||||||
|
"parserOptions": { "ecmaVersion": 2019, "sourceType": "module" },
|
||||||
|
"extends": [
|
||||||
|
"eslint:recommended",
|
||||||
|
"plugin:@typescript-eslint/eslint-recommended",
|
||||||
|
"plugin:@typescript-eslint/recommended",
|
||||||
|
"plugin:import/errors",
|
||||||
|
"plugin:import/warnings",
|
||||||
|
"plugin:import/typescript",
|
||||||
|
"plugin:prettier/recommended",
|
||||||
|
"prettier/@typescript-eslint"
|
||||||
|
],
|
||||||
|
"plugins": ["@typescript-eslint", "jest"]
|
||||||
|
}
|
||||||
79
.github/CONTRIBUTING.md
vendored
79
.github/CONTRIBUTING.md
vendored
@@ -1,26 +1,37 @@
|
|||||||
# Contributing to setup-php
|
# Contributing to setup-php
|
||||||
|
|
||||||
## Welcome!
|
|
||||||
|
|
||||||
We look forward to your contributions! Here are some examples how you can contribute:
|
|
||||||
|
|
||||||
* [Ask any questions you may have](https://github.com/shivammathur/setup-php/discussions/new?category=Q-A-Help)
|
|
||||||
* [Report a bug](https://github.com/shivammathur/setup-php/issues/new?labels=type/bug&template=bug.md)
|
|
||||||
* [Propose a new feature](https://github.com/shivammathur/setup-php/issues/new?labels=enhancement&template=feature.md)
|
|
||||||
* [Send a pull request](https://github.com/shivammathur/setup-php/pulls)
|
|
||||||
|
|
||||||
## Contributor Code of Conduct
|
## Contributor Code of Conduct
|
||||||
|
|
||||||
Please note that this project is released with a [Contributor Code of Conduct](CODE_OF_CONDUCT.md). By participating in this project you agree to abide by its terms.
|
Please note that this project is released with a [Contributor Code of Conduct](CODE_OF_CONDUCT.md). By participating in this project you agree to abide by its terms.
|
||||||
|
|
||||||
## Getting Started
|
## Workflow
|
||||||
|
|
||||||
To get started fork `setup-php` and clone it using git:
|
* Fork the project.
|
||||||
|
* Make your bug fix or feature addition.
|
||||||
|
* Add tests for it, so we don't break it in a future version unintentionally.
|
||||||
|
* If editing the scripts, create a demo integration test.
|
||||||
|
* Send a pull request to the develop branch with all the details.
|
||||||
|
|
||||||
|
Please make sure that you have [set up your user name and email address](https://git-scm.com/book/en/v2/Getting-Started-First-Time-Git-Setup) for use with Git. Strings such as `silly nick name <root@localhost>` look really stupid in the commit history of a project.
|
||||||
|
|
||||||
|
Due to time constraints, you may not always get a quick response. Please do not take delays personally and feel free to remind.
|
||||||
|
|
||||||
|
## Coding Guidelines
|
||||||
|
|
||||||
|
## Using setup-php from a Git checkout
|
||||||
|
|
||||||
|
The following commands can be used to perform the initial checkout of setup-php:
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
git clone https://github.com/<your-username>/setup-php.git
|
$ git clone https://github.com/shivammathur/setup-php.git
|
||||||
|
|
||||||
cd setup-php
|
$ cd setup-php
|
||||||
|
```
|
||||||
|
|
||||||
|
Install setup-php dependencies using [npm](https://www.npmjs.com/):
|
||||||
|
|
||||||
|
```bash
|
||||||
|
$ npm install
|
||||||
```
|
```
|
||||||
|
|
||||||
If you are using `Windows` configure `git` to handle line endings.
|
If you are using `Windows` configure `git` to handle line endings.
|
||||||
@@ -29,55 +40,31 @@ If you are using `Windows` configure `git` to handle line endings.
|
|||||||
git config --local core.autocrlf true
|
git config --local core.autocrlf true
|
||||||
```
|
```
|
||||||
|
|
||||||
Install `setup-php` dependencies using [npm](https://www.npmjs.com/):
|
|
||||||
|
|
||||||
```bash
|
|
||||||
npm install
|
|
||||||
```
|
|
||||||
|
|
||||||
## Workflow to create Pull Requests
|
|
||||||
|
|
||||||
* Fork the `setup-php` project and clone it.
|
|
||||||
* Create a new branch from the develop branch.
|
|
||||||
* Make your bug fix or feature addition.
|
|
||||||
* Add tests for it, so we don't break it in a future version unintentionally.
|
|
||||||
* Ensure the test suite passes and the code complies with our coding guidelines (see below).
|
|
||||||
* Send a pull request to the develop branch with all the details.
|
|
||||||
* If possible, create a GitHub Actions workflow with an integration test for the change in a demo repository and link it in your pull request.
|
|
||||||
|
|
||||||
Please make sure that you have [set up your user name and email address](https://git-scm.com/book/en/v2/Getting-Started-First-Time-Git-Setup) for use with Git. Strings such as `silly nick name <root@localhost>` look really stupid in the commit history of a project.
|
|
||||||
|
|
||||||
Due to time constraints, you may not always get a quick response. Please do not take delays personally and feel free to remind.
|
|
||||||
|
|
||||||
## Coding Guidelines
|
|
||||||
|
|
||||||
This project comes with `.prettierrc.json` and `eslintrc.json` configuration files. Please run the following commands to fix and verify the code quality.
|
This project comes with `.prettierrc.json` and `eslintrc.json` configuration files. Please run the following commands to fix and verify the code quality.
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
npm run format
|
$ npm run format
|
||||||
npm run lint
|
$ npm run lint
|
||||||
```
|
```
|
||||||
|
|
||||||
### Running the test suite
|
## Running the test suite
|
||||||
|
|
||||||
After following the steps shown above, The `setup-php` tests in the `__tests__` directory can be run using this command:
|
After following the steps shown above, The `setup-php` tests in the `__tests__` directory can be run using this command:
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
npm test
|
$ npm test
|
||||||
```
|
```
|
||||||
|
|
||||||
### Creating a release
|
## Creating a release
|
||||||
|
|
||||||
Creating a release means compiling all the TypeScript code to a single file which `setup-php` can run. Run this, before you push your changes.
|
Create a release before you push your changes.
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
npm run build
|
$ npm run release
|
||||||
npm run release
|
|
||||||
```
|
```
|
||||||
|
|
||||||
### Reporting issues and discussions
|
## Reporting issues
|
||||||
|
|
||||||
For questions or support, we prefer GitHub Discussions. For any bugs or new features you can create an issue using the appropriate template:
|
Please submit the issue using the appropriate template provided for a bug report or a feature request:
|
||||||
|
|
||||||
* [Discussions](https://github.com/shivammathur/setup-php/discussions)
|
|
||||||
* [Issues](https://github.com/shivammathur/setup-php/issues)
|
* [Issues](https://github.com/shivammathur/setup-php/issues)
|
||||||
|
|||||||
6
.github/FUNDING.yml
vendored
6
.github/FUNDING.yml
vendored
@@ -1,3 +1,7 @@
|
|||||||
# These are supported funding model platforms
|
# These are supported funding model platforms
|
||||||
|
|
||||||
github: shivammathur
|
open_collective: setup-php
|
||||||
|
tidelift: "npm/setup-php"
|
||||||
|
community_bridge: setup-php
|
||||||
|
patreon: shivammathur
|
||||||
|
custom: https://www.paypal.me/shivammathur
|
||||||
|
|||||||
94
.github/ISSUE_TEMPLATE/bug.yml
vendored
94
.github/ISSUE_TEMPLATE/bug.yml
vendored
@@ -1,94 +0,0 @@
|
|||||||
name: Bug report
|
|
||||||
description: Nice, you found a bug!
|
|
||||||
title: "Bug: "
|
|
||||||
labels: ["bug"]
|
|
||||||
assignees: ["shivammathur"]
|
|
||||||
body:
|
|
||||||
- type: markdown
|
|
||||||
attributes:
|
|
||||||
value: "Please fill out the sections below to help us address your issue."
|
|
||||||
|
|
||||||
- type: textarea
|
|
||||||
id: bug-description
|
|
||||||
attributes:
|
|
||||||
label: "Describe the bug"
|
|
||||||
placeholder: "Please describe the bug concisely."
|
|
||||||
validations:
|
|
||||||
required: true
|
|
||||||
|
|
||||||
- type: checkboxes
|
|
||||||
id: version
|
|
||||||
attributes:
|
|
||||||
label: "Version"
|
|
||||||
description: "I have checked releases, and the bug exists in the latest patch version of `v1` or `v2`."
|
|
||||||
options:
|
|
||||||
- label: "v2"
|
|
||||||
- label: "v1"
|
|
||||||
validations:
|
|
||||||
required: true
|
|
||||||
|
|
||||||
- type: dropdown
|
|
||||||
id: runners
|
|
||||||
attributes:
|
|
||||||
label: "Runners"
|
|
||||||
description: "Please choose the GitHub Action runner your workflow uses."
|
|
||||||
options:
|
|
||||||
- "GitHub Hosted"
|
|
||||||
- "Self Hosted"
|
|
||||||
validations:
|
|
||||||
required: true
|
|
||||||
|
|
||||||
- type: textarea
|
|
||||||
id: operating-systems
|
|
||||||
attributes:
|
|
||||||
label: "Operating systems"
|
|
||||||
placeholder: "e.g., Ubuntu 22.04, Windows Server 2022, etc."
|
|
||||||
validations:
|
|
||||||
required: true
|
|
||||||
|
|
||||||
- type: textarea
|
|
||||||
id: php-versions
|
|
||||||
attributes:
|
|
||||||
label: "PHP versions"
|
|
||||||
placeholder: "e.g., PHP 7.4, PHP 8.0, etc."
|
|
||||||
validations:
|
|
||||||
required: true
|
|
||||||
|
|
||||||
- type: textarea
|
|
||||||
id: steps-to-reproduce
|
|
||||||
attributes:
|
|
||||||
label: "To Reproduce"
|
|
||||||
placeholder: "Please provide the relevant steps of your workflow `.yml` file."
|
|
||||||
validations:
|
|
||||||
required: true
|
|
||||||
|
|
||||||
- type: textarea
|
|
||||||
id: expected-behavior
|
|
||||||
attributes:
|
|
||||||
label: "Expected behavior"
|
|
||||||
placeholder: "A clear and concise description of what you expected to happen."
|
|
||||||
validations:
|
|
||||||
required: true
|
|
||||||
|
|
||||||
- type: textarea
|
|
||||||
id: screenshots-logs
|
|
||||||
attributes:
|
|
||||||
label: "Screenshots/Logs"
|
|
||||||
placeholder: "Drag and drop images or paste logs here..."
|
|
||||||
|
|
||||||
- type: textarea
|
|
||||||
id: additional-context
|
|
||||||
attributes:
|
|
||||||
label: "Additional context"
|
|
||||||
placeholder: "Add any other context about the problem here."
|
|
||||||
|
|
||||||
- type: dropdown
|
|
||||||
id: willing-to-submit-pr
|
|
||||||
attributes:
|
|
||||||
label: "Are you willing to submit a PR?"
|
|
||||||
description: "We accept pull requests targeting the develop branch."
|
|
||||||
options:
|
|
||||||
- "Yes"
|
|
||||||
- "No"
|
|
||||||
validations:
|
|
||||||
required: true
|
|
||||||
42
.github/ISSUE_TEMPLATE/bug_report.md
vendored
Normal file
42
.github/ISSUE_TEMPLATE/bug_report.md
vendored
Normal file
@@ -0,0 +1,42 @@
|
|||||||
|
---
|
||||||
|
name: Bug report
|
||||||
|
about: Nice, you found a bug!
|
||||||
|
title: ''
|
||||||
|
labels: 'bug'
|
||||||
|
assignees: 'shivammathur'
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
**Describe the bug**
|
||||||
|
<!-- Please describe the bug concisely. -->
|
||||||
|
|
||||||
|
**Version**
|
||||||
|
- [ ] I have checked releases, and the bug exists in the latest patch version of `v1` or `v2`.
|
||||||
|
- [ ] `v2`
|
||||||
|
- [ ] `v1`
|
||||||
|
|
||||||
|
**Runners**
|
||||||
|
<!-- Please mark the GitHub Action runner your workflow uses. -->
|
||||||
|
- [ ] GitHub Hosted
|
||||||
|
- [ ] Self Hosted
|
||||||
|
|
||||||
|
**Operating systems**
|
||||||
|
<!-- Please mention the operating systems your workflow uses. -->
|
||||||
|
|
||||||
|
**PHP versions**
|
||||||
|
<!-- Please mention the PHP versions your workflow uses. -->
|
||||||
|
|
||||||
|
**To Reproduce**
|
||||||
|
<!-- Please provide the relevant steps of your workflow `.yml` file. -->
|
||||||
|
|
||||||
|
**Expected behavior**
|
||||||
|
<!-- A clear and concise description of what you expected to happen. -->
|
||||||
|
|
||||||
|
**Screenshots/Logs**
|
||||||
|
<!-- If applicable, add screenshots or logs to help explain your problem. -->
|
||||||
|
|
||||||
|
**Additional context**
|
||||||
|
<!-- Add any other context about the problem here. -->
|
||||||
|
|
||||||
|
**Are you willing to submit a PR?**
|
||||||
|
<!-- We accept pull requests targeting the develop branch. -->
|
||||||
58
.github/ISSUE_TEMPLATE/feature.yml
vendored
58
.github/ISSUE_TEMPLATE/feature.yml
vendored
@@ -1,58 +0,0 @@
|
|||||||
name: Feature request
|
|
||||||
description: Suggest a new feature
|
|
||||||
title: "Feature: "
|
|
||||||
labels: ["enhancement"]
|
|
||||||
assignees: ["shivammathur"]
|
|
||||||
body:
|
|
||||||
- type: markdown
|
|
||||||
attributes:
|
|
||||||
value: "Please fill out the sections below to help us understand your new feature proposal."
|
|
||||||
|
|
||||||
- type: textarea
|
|
||||||
id: feature-description
|
|
||||||
attributes:
|
|
||||||
label: "Describe the feature"
|
|
||||||
placeholder: "A clear and concise description of what you want and why."
|
|
||||||
validations:
|
|
||||||
required: true
|
|
||||||
|
|
||||||
- type: checkboxes
|
|
||||||
id: version-check
|
|
||||||
attributes:
|
|
||||||
label: "Please check the latest release"
|
|
||||||
options:
|
|
||||||
- label: "I have checked releases, and the feature is missing in the latest patch version of `v2`."
|
|
||||||
required: true
|
|
||||||
|
|
||||||
- type: textarea
|
|
||||||
id: underlying-issue
|
|
||||||
attributes:
|
|
||||||
label: "Underlying issue"
|
|
||||||
placeholder: "Please describe the issue this would solve."
|
|
||||||
validations:
|
|
||||||
required: true
|
|
||||||
|
|
||||||
- type: textarea
|
|
||||||
id: alternatives
|
|
||||||
attributes:
|
|
||||||
label: "Describe alternatives"
|
|
||||||
placeholder: "Please mention any alternative solutions you've considered."
|
|
||||||
validations:
|
|
||||||
required: false
|
|
||||||
|
|
||||||
- type: textarea
|
|
||||||
id: additional-context
|
|
||||||
attributes:
|
|
||||||
label: "Additional context"
|
|
||||||
placeholder: "Drag and drop images or paste any additional information here..."
|
|
||||||
|
|
||||||
- type: dropdown
|
|
||||||
id: willing-to-submit-pr
|
|
||||||
attributes:
|
|
||||||
label: "Are you willing to submit a PR?"
|
|
||||||
description: "We accept pull requests targeting the develop branch."
|
|
||||||
options:
|
|
||||||
- "Yes"
|
|
||||||
- "No"
|
|
||||||
validations:
|
|
||||||
required: true
|
|
||||||
26
.github/ISSUE_TEMPLATE/feature_request.md
vendored
Normal file
26
.github/ISSUE_TEMPLATE/feature_request.md
vendored
Normal file
@@ -0,0 +1,26 @@
|
|||||||
|
---
|
||||||
|
name: Feature request
|
||||||
|
about: Suggest a new feature
|
||||||
|
title: ''
|
||||||
|
labels: 'enhancement'
|
||||||
|
assignees: 'shivammathur'
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
**Describe the feature**
|
||||||
|
<!-- Please describe concisely the feature you want to add. -->
|
||||||
|
|
||||||
|
**Version**
|
||||||
|
- [ ] I have checked releases, and the feature is missing in the latest patch version of `v2`.
|
||||||
|
|
||||||
|
**Underlying issue**
|
||||||
|
<!-- Please describe the issue this would solve. -->
|
||||||
|
|
||||||
|
**Describe alternatives**
|
||||||
|
<!-- Please mention any alternative solutions you've considered. -->
|
||||||
|
|
||||||
|
**Additional context**
|
||||||
|
<!-- Add any other context or screenshots about the feature request here. -->
|
||||||
|
|
||||||
|
**Are you willing to submit a PR?**
|
||||||
|
<!-- We accept pull requests targeting the develop branch. -->
|
||||||
25
.github/SECURITY.md
vendored
25
.github/SECURITY.md
vendored
@@ -2,20 +2,29 @@
|
|||||||
|
|
||||||
## Supported Versions
|
## Supported Versions
|
||||||
|
|
||||||
The latest patch version of `v2` release of this project is supported for security updates.
|
The following versions of this project are supported for security updates.
|
||||||
|
|
||||||
|
| Version | Supported |
|
||||||
|
| ------- | ------------------ |
|
||||||
|
| 1.10.x | :white_check_mark: |
|
||||||
|
| 2.8.x | :white_check_mark: |
|
||||||
|
|
||||||
## Supported PHP Versions
|
## Supported PHP Versions
|
||||||
|
|
||||||
This security policy only applies to the latest patch releases of the following PHP versions.
|
This security policy only applies to the latest patches of the following PHP versions.
|
||||||
|
|
||||||
| Version | Supported |
|
| Version | Supported |
|
||||||
|---------|--------------------|
|
| ------- | ------------------ |
|
||||||
| 8.1 | :white_check_mark: |
|
| 7.2 | :white_check_mark: |
|
||||||
| 8.2 | :white_check_mark: |
|
| 7.3 | :white_check_mark: |
|
||||||
| 8.3 | :white_check_mark: |
|
| 7.4 | :white_check_mark: |
|
||||||
| 8.4 | :white_check_mark: |
|
| 8.0 | :white_check_mark: |
|
||||||
|
|
||||||
## Reporting a Vulnerability
|
## Reporting a Vulnerability
|
||||||
|
|
||||||
If you have found any issues that might have security implications in the versions supported, please send a report privately to [contact@setup-php.com](mailto:contact@setup-php.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.
|
Do not report security reports publicly.
|
||||||
|
|
||||||
|
## Tidelift
|
||||||
|
|
||||||
|
If you use this GitHub Action through a Tidelift subscription, please refer to [https://tidelift.com/security](https://tidelift.com/security).
|
||||||
4
.github/codeql/codeql-configuration.yml
vendored
4
.github/codeql/codeql-configuration.yml
vendored
@@ -1,4 +0,0 @@
|
|||||||
name : CodeQL Configuration
|
|
||||||
|
|
||||||
paths:
|
|
||||||
- './src'
|
|
||||||
7
.github/dependabot.yml
vendored
7
.github/dependabot.yml
vendored
@@ -1,7 +0,0 @@
|
|||||||
version: 2
|
|
||||||
updates:
|
|
||||||
- package-ecosystem: "github-actions"
|
|
||||||
directory: "/"
|
|
||||||
target-branch: "develop"
|
|
||||||
schedule:
|
|
||||||
interval: "weekly"
|
|
||||||
33
.github/workflows/codeql.yml
vendored
33
.github/workflows/codeql.yml
vendored
@@ -1,33 +0,0 @@
|
|||||||
name: CodeQL Workflow
|
|
||||||
on:
|
|
||||||
workflow_dispatch:
|
|
||||||
schedule:
|
|
||||||
- cron: '0 15 * * 6'
|
|
||||||
permissions:
|
|
||||||
contents: read
|
|
||||||
|
|
||||||
jobs:
|
|
||||||
codeql:
|
|
||||||
if: github.event.repository.fork == false
|
|
||||||
permissions:
|
|
||||||
actions: read # for github/codeql-action/init to get workflow details
|
|
||||||
contents: read # for actions/checkout to fetch code
|
|
||||||
security-events: write # for github/codeql-action/autobuild to send a status report
|
|
||||||
runs-on: ubuntu-latest
|
|
||||||
steps:
|
|
||||||
- name: Checkout
|
|
||||||
uses: actions/checkout@v6
|
|
||||||
with:
|
|
||||||
fetch-depth: 2
|
|
||||||
|
|
||||||
- name: Initialize CodeQL
|
|
||||||
uses: github/codeql-action/init@v4
|
|
||||||
with:
|
|
||||||
config-file: ./.github/codeql/codeql-configuration.yml
|
|
||||||
languages: javascript
|
|
||||||
|
|
||||||
- name: Autobuild
|
|
||||||
uses: github/codeql-action/autobuild@v4
|
|
||||||
|
|
||||||
- name: Perform CodeQL Analysis
|
|
||||||
uses: github/codeql-action/analyze@v4
|
|
||||||
99
.github/workflows/docs.yml
vendored
99
.github/workflows/docs.yml
vendored
@@ -2,135 +2,70 @@ name: Docs workflow
|
|||||||
on:
|
on:
|
||||||
workflow_dispatch:
|
workflow_dispatch:
|
||||||
schedule:
|
schedule:
|
||||||
- cron: '0 15 * * 6'
|
- cron: '0 15 * * 2'
|
||||||
permissions:
|
|
||||||
contents: read
|
|
||||||
|
|
||||||
jobs:
|
jobs:
|
||||||
create:
|
create:
|
||||||
if: github.event.repository.fork == false
|
|
||||||
permissions:
|
|
||||||
contents: none
|
|
||||||
name: Create
|
name: Create
|
||||||
runs-on: ${{ matrix.operating-system }}
|
runs-on: ${{ matrix.operating-system }}
|
||||||
strategy:
|
strategy:
|
||||||
fail-fast: false
|
fail-fast: false
|
||||||
matrix:
|
matrix:
|
||||||
operating-system: [ubuntu-24.04, ubuntu-22.04, windows-2022, macos-15-intel]
|
operating-system: [ubuntu-20.04, ubuntu-18.04, ubuntu-16.04, windows-2019, macos-10.15, macos-11.0]
|
||||||
php-versions: ['5.3', '5.4', '5.5', '5.6', '7.0', '7.1', '7.2', '7.3', '7.4', '8.0', '8.1', '8.2', '8.3', '8.4', '8.5', '8.6']
|
php-versions: ['5.3', '5.4', '5.5', '5.6', '7.0', '7.1', '7.2', '7.3', '7.4', '8.0', '8.1']
|
||||||
steps:
|
steps:
|
||||||
- name: Setup PHP
|
- name: Setup PHP
|
||||||
uses: shivammathur/setup-php@v2
|
uses: shivammathur/setup-php@v2
|
||||||
with:
|
with:
|
||||||
php-version: ${{ matrix.php-versions }}
|
php-version: ${{ matrix.php-versions }}
|
||||||
tools: none
|
- name: Save unix
|
||||||
- name: Create file with all extensions for Linux and macOS
|
|
||||||
env:
|
env:
|
||||||
file: php${{ matrix.php-versions }}-${{ matrix.operating-system }}.md
|
file: php${{ matrix.php-versions }}-${{ matrix.operating-system }}.md
|
||||||
version: ${{ matrix.php-versions }}
|
version: ${{ matrix.php-versions }}
|
||||||
if: matrix.operating-system != 'windows-2022'
|
if: matrix.operating-system != 'windows-2019'
|
||||||
run: |
|
|
||||||
php -m >> "$file.all"
|
|
||||||
- name: Create file with all extensions for Windows
|
|
||||||
env:
|
|
||||||
file: php${{ matrix.php-versions }}-${{ matrix.operating-system }}.md
|
|
||||||
version: ${{ matrix.php-versions }}
|
|
||||||
if: matrix.operating-system == 'windows-2022'
|
|
||||||
run: |
|
|
||||||
php -m | Out-File -FilePath "$env:file.all" -Append
|
|
||||||
- name: Setup PHP
|
|
||||||
uses: shivammathur/setup-php@v2
|
|
||||||
with:
|
|
||||||
php-version: ${{ matrix.php-versions }}
|
|
||||||
extensions: none
|
|
||||||
tools: none
|
|
||||||
- name: Create final file for Linux and macOS
|
|
||||||
env:
|
|
||||||
file: php${{ matrix.php-versions }}-${{ matrix.operating-system }}.md
|
|
||||||
version: ${{ matrix.php-versions }}
|
|
||||||
if: matrix.operating-system != 'windows-2022'
|
|
||||||
run: |
|
run: |
|
||||||
echo "## PHP $version" >> "$file"
|
echo "## PHP $version" >> "$file"
|
||||||
printf "\n" >> "$file"
|
printf "\n" >> "$file"
|
||||||
echo "\`\`\`" >> "$file"
|
echo "\`\`\`" >> "$file"
|
||||||
php -m >> "$file.builtin"
|
php -m >> "$file"
|
||||||
while IFS= read -r line; do
|
|
||||||
if [[ $line == [* || -z "${line// }" ]]; then
|
|
||||||
echo "$line" >> "$file"
|
|
||||||
elif grep -q "^$line" "$file.builtin"; then
|
|
||||||
echo "$line (builtin)" >> "$file"
|
|
||||||
else
|
|
||||||
echo "$line (shared)" >> "$file"
|
|
||||||
fi
|
|
||||||
done < "$file.all"
|
|
||||||
echo "\`\`\`" >> "$file"
|
echo "\`\`\`" >> "$file"
|
||||||
printf "\n" >> "$file"
|
printf "\n" >> "$file"
|
||||||
rm "$file.all" "$file.builtin"
|
- name: Save Windows
|
||||||
- name: Create final file for Windows
|
|
||||||
env:
|
env:
|
||||||
file: php${{ matrix.php-versions }}-${{ matrix.operating-system }}.md
|
file: php${{ matrix.php-versions }}-${{ matrix.operating-system }}.md
|
||||||
version: ${{ matrix.php-versions }}
|
version: ${{ matrix.php-versions }}
|
||||||
if: matrix.operating-system == 'windows-2022'
|
if: matrix.operating-system == 'windows-2019'
|
||||||
run: |
|
run: |
|
||||||
Write-Output "## PHP ${{ matrix.php-versions }}`n" | Out-File -FilePath "$env:file"
|
Write-Output "## PHP ${{ matrix.php-versions }}`n" | Out-File -FilePath "$env:file"
|
||||||
Write-Output "``````" | Out-File -FilePath "$env:file" -Append
|
Write-Output "``````" | Out-File -FilePath "$env:file" -Append
|
||||||
php -m | Out-File -FilePath "$env:file.builtin" -Append
|
php -m | Out-File -FilePath "$env:file" -Append
|
||||||
Get-Content "$env:file.all" | ForEach-Object {
|
|
||||||
if ($_.startsWith('[') -or -not $_.trim()) {
|
|
||||||
Write-Output "$_" | Out-File -FilePath "$env:file" -Append
|
|
||||||
} elseif ($_ -in (Get-Content "$env:file.builtin")) {
|
|
||||||
Write-Output "$_ (builtin)" | Out-File -FilePath "$env:file" -Append
|
|
||||||
} else {
|
|
||||||
Write-Output "$_ (shared)" | Out-File -FilePath "$env:file" -Append
|
|
||||||
}
|
|
||||||
}
|
|
||||||
Write-Output "```````n" | Out-File -FilePath "$env:file" -Append
|
Write-Output "```````n" | Out-File -FilePath "$env:file" -Append
|
||||||
Remove-Item "$env:file.all" -Force
|
- uses: actions/upload-artifact@v2
|
||||||
Remove-Item "$env:file.builtin" -Force
|
|
||||||
- name: Upload artifacts
|
|
||||||
uses: actions/upload-artifact@v7
|
|
||||||
with:
|
with:
|
||||||
name: lists-php${{ matrix.php-versions }}-${{ matrix.operating-system }}.md
|
name: lists
|
||||||
path: php${{ matrix.php-versions }}-${{ matrix.operating-system }}.md
|
path: php${{ matrix.php-versions }}-${{ matrix.operating-system }}.md
|
||||||
update:
|
update:
|
||||||
if: github.event.repository.fork == false
|
|
||||||
permissions:
|
|
||||||
contents: write # for Git to git push
|
|
||||||
name: Update
|
name: Update
|
||||||
needs: create
|
needs: create
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
steps:
|
steps:
|
||||||
- name: Checkout
|
- name: Checkout
|
||||||
uses: actions/checkout@v6
|
uses: actions/checkout@v2
|
||||||
with:
|
with:
|
||||||
repository: ${{ github.repository }}.wiki
|
repository: ${{ github.repository }}.wiki
|
||||||
- name: Download artifacts
|
- uses: actions/download-artifact@v2
|
||||||
uses: actions/download-artifact@v8
|
|
||||||
with:
|
with:
|
||||||
path: ${{ github.workspace }}/lists
|
path: ${{ github.workspace }}
|
||||||
pattern: lists-*
|
- name: Combine
|
||||||
merge-multiple: true
|
|
||||||
- name: Configure Git
|
|
||||||
run: |
|
run: |
|
||||||
git config --local user.email "${{ secrets.email }}"
|
git config --local user.email "${{ secrets.email }}"
|
||||||
git config --local user.name "${{ github.repository_owner }}"
|
git config --local user.name "${{ github.repository_owner }}"
|
||||||
- name: Combine
|
for os in ubuntu-20.04 ubuntu-18.04 ubuntu-16.04 windows-2019 macos-10.15 macos-11.0; do
|
||||||
run: |
|
|
||||||
for os in ubuntu-24.04 ubuntu-22.04 windows-2025 windows-2022 windows-2019 macos-13 macos-14 macos-15 macos-26; do
|
|
||||||
echo "These are extensions which are loaded by default on the following PHP versions. More extensions which are available as packages and available on pecl are supported by setup-php. Refer to [php extension support](https://github.com/shivammathur/setup-php#heavy_plus_sign-php-extension-support) for more details." > Php-extensions-loaded-on-"$os".md
|
echo "These are extensions which are loaded by default on the following PHP versions. More extensions which are available as packages and available on pecl are supported by setup-php. Refer to [php extension support](https://github.com/shivammathur/setup-php#heavy_plus_sign-php-extension-support) for more details." > Php-extensions-loaded-on-"$os".md
|
||||||
for version in 5.3 5.4 5.5 5.6 7.0 7.1 7.2 7.3 7.4 8.0 8.1 8.2 8.3 8.4 8.5 8.6; do
|
for version in 5.3 5.4 5.5 5.6 7.0 7.1 7.2 7.3 7.4 8.0 8.1; do
|
||||||
if [[ "${os%-*}" = "macos" ]]; then
|
|
||||||
cat lists/php"$version"-macos-15-intel.md >> Php-extensions-loaded-on-"$os".md
|
|
||||||
elif [ "${os%-*}" = "windows" ]; then
|
|
||||||
cat lists/php"$version"-windows-2022.md >> Php-extensions-loaded-on-"$os".md
|
|
||||||
else
|
|
||||||
cat lists/php"$version"-"$os".md >> Php-extensions-loaded-on-"$os".md
|
cat lists/php"$version"-"$os".md >> Php-extensions-loaded-on-"$os".md
|
||||||
fi
|
|
||||||
done
|
done
|
||||||
done
|
done
|
||||||
rm -rf ./lists
|
rm -rf ./lists
|
||||||
- name: Update
|
|
||||||
run: |
|
|
||||||
if [ "$(git status --porcelain=v1 2>/dev/null | wc -l)" != "0" ]; then
|
if [ "$(git status --porcelain=v1 2>/dev/null | wc -l)" != "0" ]; then
|
||||||
git add .
|
git add .
|
||||||
git commit -m "Update PHP extensions on wiki - $(date +'%d-%m-%y')"
|
git commit -m "Update PHP extensions on wiki - $(date +'%d-%m-%y')"
|
||||||
|
|||||||
@@ -2,7 +2,7 @@ name: Node workflow
|
|||||||
on:
|
on:
|
||||||
pull_request:
|
pull_request:
|
||||||
branches:
|
branches:
|
||||||
- main
|
- master
|
||||||
- develop
|
- develop
|
||||||
- verbose
|
- verbose
|
||||||
paths-ignore:
|
paths-ignore:
|
||||||
@@ -10,15 +10,12 @@ on:
|
|||||||
- 'examples/**'
|
- 'examples/**'
|
||||||
push:
|
push:
|
||||||
branches:
|
branches:
|
||||||
- main
|
- master
|
||||||
- develop
|
- develop
|
||||||
- verbose
|
- verbose
|
||||||
paths-ignore:
|
paths-ignore:
|
||||||
- '**.md'
|
- '**.md'
|
||||||
- 'examples/**'
|
- 'examples/**'
|
||||||
permissions:
|
|
||||||
contents: read
|
|
||||||
|
|
||||||
jobs:
|
jobs:
|
||||||
run:
|
run:
|
||||||
name: Run
|
name: Run
|
||||||
@@ -29,14 +26,12 @@ jobs:
|
|||||||
operating-system: [ubuntu-latest, windows-latest, macos-latest]
|
operating-system: [ubuntu-latest, windows-latest, macos-latest]
|
||||||
steps:
|
steps:
|
||||||
- name: Checkout
|
- name: Checkout
|
||||||
uses: actions/checkout@v6
|
uses: actions/checkout@v2
|
||||||
with:
|
|
||||||
fetch-depth: 2
|
|
||||||
|
|
||||||
- name: Setup Node.js 24.x
|
- name: Setup Node.js 14.x
|
||||||
uses: actions/setup-node@v6
|
uses: actions/setup-node@v1
|
||||||
with:
|
with:
|
||||||
node-version: 24.x
|
node-version: 14.x
|
||||||
|
|
||||||
- name: Install dependencies
|
- name: Install dependencies
|
||||||
run: npm install
|
run: npm install
|
||||||
@@ -50,14 +45,7 @@ jobs:
|
|||||||
- name: Run tests
|
- name: Run tests
|
||||||
run: npm test
|
run: npm test
|
||||||
|
|
||||||
- name: Run npm audit
|
|
||||||
run: npm audit
|
|
||||||
|
|
||||||
- name: Send Coverage
|
- name: Send Coverage
|
||||||
uses: codecov/codecov-action@v6
|
continue-on-error: true
|
||||||
with:
|
timeout-minutes: 1
|
||||||
token: ${{ secrets.CODECOV_TOKEN }}
|
run: curl -s https://codecov.io/bash | bash -s -- -t ${{secrets.CODECOV_TOKEN}} -f coverage/clover.xml -n github-actions-codecov-${{ matrix.operating-system }}
|
||||||
files: coverage/lcov.info
|
|
||||||
name: github-actions-codecov-${{ matrix.operating-system }}
|
|
||||||
fail_ci_if_error: false
|
|
||||||
verbose: true
|
|
||||||
61
.github/workflows/publish.yml
vendored
61
.github/workflows/publish.yml
vendored
@@ -1,61 +0,0 @@
|
|||||||
name: Publish Package
|
|
||||||
on:
|
|
||||||
release:
|
|
||||||
types: [created]
|
|
||||||
workflow_dispatch:
|
|
||||||
inputs:
|
|
||||||
skip:
|
|
||||||
description: Skip release to repository
|
|
||||||
required: false
|
|
||||||
tag:
|
|
||||||
description: Tag name
|
|
||||||
required: true
|
|
||||||
jobs:
|
|
||||||
build:
|
|
||||||
runs-on: ubuntu-latest
|
|
||||||
permissions:
|
|
||||||
contents: read
|
|
||||||
packages: write
|
|
||||||
id-token: write
|
|
||||||
steps:
|
|
||||||
- name: Checkout release
|
|
||||||
if: github.event_name != 'workflow_dispatch'
|
|
||||||
uses: actions/checkout@v6
|
|
||||||
|
|
||||||
- name: Checkout tag
|
|
||||||
uses: actions/checkout@v6
|
|
||||||
if: github.event_name == 'workflow_dispatch'
|
|
||||||
with:
|
|
||||||
ref: ${{ github.event.inputs.tag }}
|
|
||||||
|
|
||||||
- name: Setup Node.js
|
|
||||||
uses: actions/setup-node@v6
|
|
||||||
with:
|
|
||||||
node-version: '24.x'
|
|
||||||
registry-url: https://registry.npmjs.org
|
|
||||||
|
|
||||||
- name: Install dependencies and add lib
|
|
||||||
run: |
|
|
||||||
npm install
|
|
||||||
npm run build
|
|
||||||
sed -i -e '/lib\//d' .gitignore
|
|
||||||
|
|
||||||
- name: Publish to NPM
|
|
||||||
if: "!contains(github.event.inputs.skip, 'skip-npm')"
|
|
||||||
run: npm publish --access public
|
|
||||||
|
|
||||||
- name: Change to GitHub Packages registry
|
|
||||||
uses: actions/setup-node@v6
|
|
||||||
with:
|
|
||||||
registry-url: https://npm.pkg.github.com
|
|
||||||
scope: '@shivammathur'
|
|
||||||
|
|
||||||
- name: Patch package.json
|
|
||||||
run: |
|
|
||||||
sed -i 's#"name": "#"name": "@shivammathur/#' package.json
|
|
||||||
|
|
||||||
- name: Publish to GitHub Packages
|
|
||||||
if: "!contains(github.event.inputs.skip, 'skip-github-packages')"
|
|
||||||
run: npm publish
|
|
||||||
env:
|
|
||||||
NODE_AUTH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
|
||||||
@@ -3,7 +3,7 @@ on:
|
|||||||
workflow_dispatch:
|
workflow_dispatch:
|
||||||
pull_request:
|
pull_request:
|
||||||
branches:
|
branches:
|
||||||
- main
|
- master
|
||||||
- develop
|
- develop
|
||||||
- verbose
|
- verbose
|
||||||
paths-ignore:
|
paths-ignore:
|
||||||
@@ -11,16 +11,12 @@ on:
|
|||||||
- 'examples/**'
|
- 'examples/**'
|
||||||
push:
|
push:
|
||||||
branches:
|
branches:
|
||||||
- main
|
- master
|
||||||
- develop
|
- develop
|
||||||
- verbose
|
- verbose
|
||||||
paths-ignore:
|
paths-ignore:
|
||||||
- '**.md'
|
- '**.md'
|
||||||
- 'examples/**'
|
- 'examples/**'
|
||||||
permissions:
|
|
||||||
contents: read
|
|
||||||
env:
|
|
||||||
default-php-version: '8.2'
|
|
||||||
jobs:
|
jobs:
|
||||||
run:
|
run:
|
||||||
name: Run
|
name: Run
|
||||||
@@ -28,51 +24,41 @@ jobs:
|
|||||||
strategy:
|
strategy:
|
||||||
fail-fast: false
|
fail-fast: false
|
||||||
matrix:
|
matrix:
|
||||||
operating-system: [ubuntu-24.04, ubuntu-22.04, windows-2022, macos-15-intel]
|
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', '8.1', '8.2', '8.3', '8.4', '8.5', '8.6']
|
php-versions: ['5.3', '5.4', '5.5', '5.6', '7.0', '7.1', '7.2', '7.3', '7.4', '8.0', '8.1']
|
||||||
include:
|
|
||||||
- operating-system: ubuntu-24.04
|
|
||||||
php-versions: ''
|
|
||||||
php-version-file: 'php-version-file'
|
|
||||||
env:
|
env:
|
||||||
extensions: xml, opcache, xdebug, pcov, gd
|
extensions: xml, opcache, xdebug, pcov
|
||||||
key: cache-v5
|
key: cache-v3
|
||||||
steps:
|
steps:
|
||||||
- name: Checkout
|
- name: Checkout
|
||||||
uses: actions/checkout@v6
|
uses: actions/checkout@v2
|
||||||
|
|
||||||
- name: Setup cache environment
|
- name: Setup cache environment
|
||||||
id: cache-env
|
id: cache-env
|
||||||
uses: shivammathur/cache-extensions@develop
|
uses: shivammathur/cache-extensions@develop
|
||||||
with:
|
with:
|
||||||
php-version: ${{ matrix.php-versions || env.default-php-version }}
|
php-version: ${{ matrix.php-versions }}
|
||||||
extensions: ${{ env.extensions }}
|
extensions: ${{ env.extensions }}
|
||||||
key: ${{ env.key }}
|
key: ${{ env.key }}
|
||||||
|
|
||||||
- name: Cache extensions
|
- name: Cache extensions
|
||||||
uses: actions/cache@v5
|
uses: actions/cache@v2
|
||||||
with:
|
with:
|
||||||
path: ${{ steps.cache-env.outputs.dir }}
|
path: ${{ steps.cache-env.outputs.dir }}
|
||||||
key: ${{ steps.cache-env.outputs.key }}
|
key: ${{ steps.cache-env.outputs.key }}
|
||||||
restore-keys: ${{ steps.cache-env.outputs.key }}
|
restore-keys: ${{ steps.cache-env.outputs.key }}
|
||||||
|
|
||||||
- name: Stage php-version-file
|
|
||||||
if: ${{ matrix.php-version-file == 'php-version-file' }}
|
|
||||||
run: |
|
|
||||||
echo ${{ env.default-php-version }} > php-version-file
|
|
||||||
|
|
||||||
- name: Setup PHP with extensions and custom config
|
- name: Setup PHP with extensions and custom config
|
||||||
run: node dist/index.js
|
run: node dist/index.js
|
||||||
env:
|
env:
|
||||||
php-version: ${{ matrix.php-versions }}
|
php-version: ${{ matrix.php-versions }}
|
||||||
php-version-file: ${{ matrix.php-version-file }}
|
|
||||||
extensions: ${{ env.extensions }}
|
extensions: ${{ env.extensions }}
|
||||||
ini-values: post_max_size=256M, short_open_tag=On, date.timezone=Asia/Kolkata
|
ini-values: post_max_size=256M, short_open_tag=On, date.timezone=Asia/Kolkata
|
||||||
|
|
||||||
- name: Testing PHP version
|
- name: Testing PHP version
|
||||||
run: |
|
run: |
|
||||||
php -v
|
php -v
|
||||||
php -r "if(strpos(phpversion(), '${{ matrix.php-versions || env.default-php-version }}') === false) {throw new Exception('Wrong PHP version Installed');}"
|
php -r "if(strpos(phpversion(), '${{ matrix.php-versions }}') === false) {throw new Exception('Wrong PHP version Installed');}"
|
||||||
|
|
||||||
- name: Testing Composer version
|
- name: Testing Composer version
|
||||||
run: |
|
run: |
|
||||||
@@ -81,7 +67,6 @@ jobs:
|
|||||||
- name: Testing Extensions
|
- name: Testing Extensions
|
||||||
run: |
|
run: |
|
||||||
php -m
|
php -m
|
||||||
php -r "if(! extension_loaded('gd')) {throw new Exception('gd not found');}"
|
|
||||||
php -r "if(! extension_loaded('xml')) {throw new Exception('xml not found');}"
|
php -r "if(! extension_loaded('xml')) {throw new Exception('xml not found');}"
|
||||||
php -r "if(! extension_loaded('Xdebug')) {throw new Exception('Xdebug not found');}"
|
php -r "if(! extension_loaded('Xdebug')) {throw new Exception('Xdebug not found');}"
|
||||||
php -r "if(phpversion()>=7.1 && ! extension_loaded('pcov')) {throw new Exception('PCOV not found');}"
|
php -r "if(phpversion()>=7.1 && ! extension_loaded('pcov')) {throw new Exception('PCOV not found');}"
|
||||||
2
.gitignore
vendored
2
.gitignore
vendored
@@ -3,7 +3,7 @@ node_modules/
|
|||||||
__tests__/runner/*
|
__tests__/runner/*
|
||||||
lib/
|
lib/
|
||||||
|
|
||||||
# Rest of the file pulled from https://github.com/github/gitignore/blob/main/Node.gitignore
|
# Rest of the file pulled from https://github.com/github/gitignore/blob/master/Node.gitignore
|
||||||
# Logs
|
# Logs
|
||||||
logs
|
logs
|
||||||
*.log
|
*.log
|
||||||
|
|||||||
@@ -1 +0,0 @@
|
|||||||
20
|
|
||||||
2
LICENSE
2
LICENSE
@@ -1,7 +1,7 @@
|
|||||||
|
|
||||||
The MIT License (MIT)
|
The MIT License (MIT)
|
||||||
|
|
||||||
Copyright (c) shivammathur and contributors
|
Copyright (c) 2019-2020 shivammathur and contributors
|
||||||
|
|
||||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||||
of this software and associated documentation files (the "Software"), to deal
|
of this software and associated documentation files (the "Software"), to deal
|
||||||
|
|||||||
@@ -1,20 +1,52 @@
|
|||||||
import * as config from '../src/config';
|
import * as config from '../src/config';
|
||||||
|
|
||||||
describe('Config tests', () => {
|
describe('Config tests', () => {
|
||||||
it.each`
|
it('checking addINIValuesOnWindows', async () => {
|
||||||
ini_values | os | output
|
let win32: string = await config.addINIValues(
|
||||||
${'a=b, c=d'} | ${'win32'} | ${'Add-Content "$php_dir\\php.ini" "a=b\nc=d"'}
|
'post_max_size=256M, short_open_tag=On, date.timezone=Asia/Kolkata',
|
||||||
${'a=b, c=d'} | ${'linux'} | ${'echo "a=b\nc=d" | sudo tee -a "${pecl_file:-${ini_file[@]}}"'}
|
'win32'
|
||||||
${'a=b, c=d'} | ${'darwin'} | ${'echo "a=b\nc=d" | sudo tee -a "${pecl_file:-${ini_file[@]}}"'}
|
);
|
||||||
${'a=b & ~c'} | ${'win32'} | ${'Add-Content "$php_dir\\php.ini" "a=\'b & ~c\'"'}
|
expect(win32).toContain(
|
||||||
${'a="~(b)"'} | ${'win32'} | ${'Add-Content "$php_dir\\php.ini" "a=\'~(b)\'"'}
|
'Add-Content "$php_dir\\php.ini" "post_max_size=256M\nshort_open_tag=On\ndate.timezone=Asia/Kolkata"'
|
||||||
${'a="b, c"'} | ${'win32'} | ${'Add-Content "$php_dir\\php.ini" "a=b, c"'}
|
);
|
||||||
${'disable_functions="exec,system"'} | ${'linux'} | ${'echo "disable_functions=exec,system" | sudo tee -a'}
|
|
||||||
${'disable_functions="exec,system"'} | ${'win32'} | ${'Add-Content "$php_dir\\php.ini" "disable_functions=exec,system"'}
|
win32 = await config.addINIValues(
|
||||||
${'a=$(id)'} | ${'linux'} | ${'echo "a=\'\\$(id)\'"'}
|
'post_max_size=256M, short_open_tag=On, date.timezone=Asia/Kolkata',
|
||||||
${'a=$(id)'} | ${'win32'} | ${'Add-Content "$php_dir\\php.ini" "a=\'`$(id)\'"'}
|
'openbsd'
|
||||||
${'a=b, c=d'} | ${'openbsd'} | ${'Platform openbsd is not supported'}
|
);
|
||||||
`('checking addINIValues on $os', async ({ini_values, os, output}) => {
|
expect(win32).toContain('Platform openbsd is not supported');
|
||||||
expect(await config.addINIValues(ini_values, os)).toContain(output);
|
});
|
||||||
|
|
||||||
|
it('checking addINIValuesOnLinux', async () => {
|
||||||
|
let linux: string = await config.addINIValues(
|
||||||
|
'post_max_size=256M, short_open_tag=On, date.timezone=Asia/Kolkata',
|
||||||
|
'linux',
|
||||||
|
true
|
||||||
|
);
|
||||||
|
expect(linux).toContain(
|
||||||
|
'echo "post_max_size=256M\nshort_open_tag=On\ndate.timezone=Asia/Kolkata" | sudo tee -a "${pecl_file:-${ini_file[@]}}"'
|
||||||
|
);
|
||||||
|
|
||||||
|
linux = await config.addINIValues(
|
||||||
|
'post_max_size=256M, short_open_tag=On, date.timezone=Asia/Kolkata',
|
||||||
|
'openbsd'
|
||||||
|
);
|
||||||
|
expect(linux).toContain('Platform openbsd is not supported');
|
||||||
|
});
|
||||||
|
|
||||||
|
it('checking addINIValuesOnDarwin', async () => {
|
||||||
|
let darwin: string = await config.addINIValues(
|
||||||
|
'post_max_size=256M, short_open_tag=On, date.timezone=Asia/Kolkata',
|
||||||
|
'darwin'
|
||||||
|
);
|
||||||
|
expect(darwin).toContain(
|
||||||
|
'echo "post_max_size=256M\nshort_open_tag=On\ndate.timezone=Asia/Kolkata" | sudo tee -a "${pecl_file:-${ini_file[@]}}"'
|
||||||
|
);
|
||||||
|
|
||||||
|
darwin = await config.addINIValues(
|
||||||
|
'post_max_size=256M, short_open_tag=On, date.timezone=Asia/Kolkata',
|
||||||
|
'openbsd'
|
||||||
|
);
|
||||||
|
expect(darwin).toContain('Platform openbsd is not supported');
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|||||||
@@ -1,106 +0,0 @@
|
|||||||
import * as core from '../src/core';
|
|
||||||
|
|
||||||
describe('Core tests', () => {
|
|
||||||
const originalEnv = process.env;
|
|
||||||
const originalExitCode = process.exitCode;
|
|
||||||
let stdoutOutput: string;
|
|
||||||
const originalWrite = process.stdout.write;
|
|
||||||
|
|
||||||
beforeEach(() => {
|
|
||||||
process.env = {...originalEnv};
|
|
||||||
process.exitCode = undefined;
|
|
||||||
stdoutOutput = '';
|
|
||||||
process.stdout.write = jest.fn((chunk: string | Uint8Array): boolean => {
|
|
||||||
stdoutOutput += chunk.toString();
|
|
||||||
return true;
|
|
||||||
}) as unknown as typeof process.stdout.write;
|
|
||||||
});
|
|
||||||
|
|
||||||
afterEach(() => {
|
|
||||||
process.env = originalEnv;
|
|
||||||
process.exitCode = originalExitCode;
|
|
||||||
process.stdout.write = originalWrite;
|
|
||||||
});
|
|
||||||
|
|
||||||
it('checking issueCommand with no properties', () => {
|
|
||||||
core.issueCommand('warning', {}, 'test message');
|
|
||||||
expect(stdoutOutput).toContain('::warning::test message');
|
|
||||||
});
|
|
||||||
|
|
||||||
it('checking issueCommand with properties', () => {
|
|
||||||
core.issueCommand('error', {file: 'test.ts', line: '10'}, 'error message');
|
|
||||||
expect(stdoutOutput).toContain(
|
|
||||||
'::error file=test.ts,line=10::error message'
|
|
||||||
);
|
|
||||||
});
|
|
||||||
|
|
||||||
it('checking issueCommand escapes special characters in message', () => {
|
|
||||||
core.issueCommand('warning', {}, 'line1\nline2\rline3%percent');
|
|
||||||
expect(stdoutOutput).toContain(
|
|
||||||
'::warning::line1%0Aline2%0Dline3%25percent'
|
|
||||||
);
|
|
||||||
});
|
|
||||||
|
|
||||||
it('checking issueCommand escapes special characters in properties', () => {
|
|
||||||
core.issueCommand('error', {file: 'path:to,file'}, 'message');
|
|
||||||
expect(stdoutOutput).toContain('::error file=path%3Ato%2Cfile::message');
|
|
||||||
});
|
|
||||||
|
|
||||||
it('checking issueCommand with Error object', () => {
|
|
||||||
const error = new Error('test error');
|
|
||||||
core.issueCommand('error', {}, error);
|
|
||||||
expect(stdoutOutput).toContain('::error::Error: test error');
|
|
||||||
});
|
|
||||||
|
|
||||||
it('checking issueCommand filters empty properties', () => {
|
|
||||||
core.issueCommand('warning', {file: 'test.ts', line: ''}, 'message');
|
|
||||||
expect(stdoutOutput).toContain('::warning file=test.ts::message');
|
|
||||||
});
|
|
||||||
|
|
||||||
it('checking error', () => {
|
|
||||||
core.error('error message');
|
|
||||||
expect(stdoutOutput).toContain('::error::error message');
|
|
||||||
});
|
|
||||||
|
|
||||||
it('checking error with Error object', () => {
|
|
||||||
core.error(new Error('error instance'));
|
|
||||||
expect(stdoutOutput).toContain('::error::Error: error instance');
|
|
||||||
});
|
|
||||||
|
|
||||||
it('checking setFailed', () => {
|
|
||||||
core.setFailed('failure message');
|
|
||||||
expect(process.exitCode).toBe(1);
|
|
||||||
expect(stdoutOutput).toContain('::error::failure message');
|
|
||||||
});
|
|
||||||
|
|
||||||
it('checking setFailed with Error object', () => {
|
|
||||||
core.setFailed(new Error('failure error'));
|
|
||||||
expect(process.exitCode).toBe(1);
|
|
||||||
expect(stdoutOutput).toContain('::error::Error: failure error');
|
|
||||||
});
|
|
||||||
|
|
||||||
it('checking getInput returns value', () => {
|
|
||||||
process.env['INPUT_TEST-INPUT'] = 'test value';
|
|
||||||
expect(core.getInput('test-input')).toBe('test value');
|
|
||||||
});
|
|
||||||
|
|
||||||
it('checking getInput trims value', () => {
|
|
||||||
process.env['INPUT_TEST-INPUT'] = ' trimmed ';
|
|
||||||
expect(core.getInput('test-input')).toBe('trimmed');
|
|
||||||
});
|
|
||||||
|
|
||||||
it('checking getInput returns empty string for missing input', () => {
|
|
||||||
expect(core.getInput('missing-input')).toBe('');
|
|
||||||
});
|
|
||||||
|
|
||||||
it('checking getInput throws for required missing input', () => {
|
|
||||||
expect(() => core.getInput('missing-input', true)).toThrow(
|
|
||||||
'Input required and not supplied: missing-input'
|
|
||||||
);
|
|
||||||
});
|
|
||||||
|
|
||||||
it('checking getInput handles spaces in name', () => {
|
|
||||||
process.env['INPUT_INPUT_WITH_SPACES'] = 'spaced value';
|
|
||||||
expect(core.getInput('input with spaces')).toBe('spaced value');
|
|
||||||
});
|
|
||||||
});
|
|
||||||
@@ -1,44 +1,110 @@
|
|||||||
import * as coverage from '../src/coverage';
|
import * as coverage from '../src/coverage';
|
||||||
|
|
||||||
describe('Config tests', () => {
|
describe('Config tests', () => {
|
||||||
it.each`
|
it('checking addCoverage with PCOV on windows', async () => {
|
||||||
driver | php | os | output
|
let win32: string = await coverage.addCoverage('PCOV', '7.4', 'win32');
|
||||||
${'PCOV'} | ${'7.4'} | ${'win32'} | ${'Add-Extension pcov,Disable-Extension xdebug false'}
|
expect(win32).toContain('Add-Extension pcov');
|
||||||
${'pcov'} | ${'7.4'} | ${'win32'} | ${'$pcov_version = php -r "echo phpversion(\'pcov\');"'}
|
expect(win32).toContain('Remove-Extension xdebug');
|
||||||
${'pcov'} | ${'7.4'} | ${'win32'} | ${'PCOV $pcov_version enabled as coverage driver'}
|
|
||||||
${'pcov'} | ${'7.0'} | ${'win32'} | ${'PHP 7.1 or newer is required'}
|
win32 = await coverage.addCoverage('pcov', '7.0', 'win32');
|
||||||
${'pcov'} | ${'5.6'} | ${'win32'} | ${'PHP 7.1 or newer is required'}
|
expect(win32).toContain('PHP 7.1 or newer is required');
|
||||||
${'pcov'} | ${'7.4'} | ${'win32'} | ${'Add-Extension pcov,Disable-Extension xdebug false'}
|
|
||||||
${'pcov'} | ${'7.4'} | ${'linux'} | ${'add_extension pcov,disable_extension xdebug false'}
|
win32 = await coverage.addCoverage('pcov', '5.6', 'win32');
|
||||||
${'pcov'} | ${'7.4'} | ${'darwin'} | ${'add_brew_extension pcov,disable_extension xdebug false'}
|
expect(win32).toContain('PHP 7.1 or newer is required');
|
||||||
${'xdebug'} | ${'7.4'} | ${'win32'} | ${'Add-Extension xdebug'}
|
|
||||||
${'xdebug3'} | ${'7.1'} | ${'win32'} | ${'xdebug3 is not supported on PHP 7.1'}
|
|
||||||
${'xdebug2'} | ${'7.4'} | ${'win32'} | ${'Add-Extension xdebug stable 2.9.8'}
|
|
||||||
${'xdebug'} | ${'8.0'} | ${'linux'} | ${'add_extension xdebug'}
|
|
||||||
${'xdebug3'} | ${'8.0'} | ${'linux'} | ${'add_extension xdebug'}
|
|
||||||
${'xdebug2'} | ${'7.4'} | ${'linux'} | ${'add_pecl_extension xdebug 2.9.8 zend_extension'}
|
|
||||||
${'xdebug'} | ${'7.4'} | ${'linux'} | ${'xdebug_version="$(php -r "echo phpversion(\'xdebug\');")"'}
|
|
||||||
${'xdebug'} | ${'7.4'} | ${'linux'} | ${'Xdebug $xdebug_version enabled as coverage driver'}
|
|
||||||
${'xdebug'} | ${'7.4'} | ${'darwin'} | ${'add_brew_extension xdebug'}
|
|
||||||
${'xdebug3'} | ${'7.1'} | ${'darwin'} | ${'xdebug3 is not supported on PHP 7.1'}
|
|
||||||
${'xdebug2'} | ${'7.4'} | ${'darwin'} | ${'add_brew_extension xdebug2'}
|
|
||||||
${'xdebug2'} | ${'8.0'} | ${'darwin'} | ${'xdebug2 is not supported on PHP 8.0'}
|
|
||||||
${'none'} | ${'7.4'} | ${'win32'} | ${'Disable-Extension xdebug false,Disable-Extension pcov false'}
|
|
||||||
${'none'} | ${'7.4'} | ${'linux'} | ${'disable_extension xdebug false,disable_extension pcov false'}
|
|
||||||
${'none'} | ${'7.4'} | ${'darwin'} | ${'disable_extension xdebug false,disable_extension pcov false'}
|
|
||||||
${'nocov'} | ${'7.x'} | ${'any'} | ${''}
|
|
||||||
${''} | ${'7.x'} | ${'any'} | ${''}
|
|
||||||
`(
|
|
||||||
'checking addCoverage with $driver on $os',
|
|
||||||
async ({driver, php, os, output}) => {
|
|
||||||
const script: string = await coverage.addCoverage(driver, php, os);
|
|
||||||
if (output) {
|
|
||||||
output.split(',').forEach((command: string) => {
|
|
||||||
expect(script).toContain(command);
|
|
||||||
});
|
});
|
||||||
} else {
|
|
||||||
expect(script).toEqual(output);
|
it('checking addCoverage with PCOV on linux', async () => {
|
||||||
}
|
const linux: string = await coverage.addCoverage('pcov', '7.4', 'linux');
|
||||||
}
|
expect(linux).toContain('add_extension pcov');
|
||||||
|
expect(linux).toContain('remove_extension xdebug');
|
||||||
|
});
|
||||||
|
|
||||||
|
it('checking addCoverage with PCOV on darwin', async () => {
|
||||||
|
const darwin: string = await coverage.addCoverage('pcov', '7.4', 'darwin');
|
||||||
|
expect(darwin).toContain('add_brew_extension pcov');
|
||||||
|
expect(darwin).toContain('remove_extension xdebug');
|
||||||
|
});
|
||||||
|
|
||||||
|
it('checking addCoverage with Xdebug on windows', async () => {
|
||||||
|
const win32: string = await coverage.addCoverage('xdebug', '7.4', 'win32');
|
||||||
|
expect(win32).toContain('Add-Extension xdebug');
|
||||||
|
});
|
||||||
|
|
||||||
|
it('checking addCoverage with Xdebug3 on windows', async () => {
|
||||||
|
const win32: string = await coverage.addCoverage('xdebug3', '7.4', 'win32');
|
||||||
|
expect(win32).toContain('Add-Extension xdebug');
|
||||||
|
});
|
||||||
|
|
||||||
|
it('checking addCoverage with Xdebug2 on windows', async () => {
|
||||||
|
const win32: string = await coverage.addCoverage('xdebug2', '7.4', 'win32');
|
||||||
|
expect(win32).toContain('Add-Extension xdebug stable 2.9.8');
|
||||||
|
});
|
||||||
|
|
||||||
|
it('checking addCoverage with Xdebug on linux', async () => {
|
||||||
|
const linux: string = await coverage.addCoverage('xdebug', '8.0', 'linux');
|
||||||
|
expect(linux).toContain('add_extension xdebug');
|
||||||
|
});
|
||||||
|
|
||||||
|
it('checking addCoverage with Xdebug3 on linux', async () => {
|
||||||
|
const linux: string = await coverage.addCoverage('xdebug3', '8.0', 'linux');
|
||||||
|
expect(linux).toContain('add_extension xdebug');
|
||||||
|
});
|
||||||
|
|
||||||
|
it('checking addCoverage with Xdebug2 on linux', async () => {
|
||||||
|
const linux: string = await coverage.addCoverage('xdebug2', '7.4', 'linux');
|
||||||
|
expect(linux).toContain('add_pecl_extension xdebug 2.9.8 zend_extension');
|
||||||
|
});
|
||||||
|
|
||||||
|
it('checking addCoverage with Xdebug on darwin', async () => {
|
||||||
|
const darwin: string = await coverage.addCoverage(
|
||||||
|
'xdebug',
|
||||||
|
'7.4',
|
||||||
|
'darwin'
|
||||||
);
|
);
|
||||||
|
expect(darwin).toContain('add_brew_extension xdebug');
|
||||||
|
});
|
||||||
|
|
||||||
|
it('checking addCoverage with Xdebug3 on darwin', async () => {
|
||||||
|
const darwin: string = await coverage.addCoverage(
|
||||||
|
'xdebug3',
|
||||||
|
'7.4',
|
||||||
|
'darwin'
|
||||||
|
);
|
||||||
|
expect(darwin).toContain('add_brew_extension xdebug');
|
||||||
|
});
|
||||||
|
|
||||||
|
it('checking addCoverage with Xdebug2 on darwin', async () => {
|
||||||
|
const darwin: string = await coverage.addCoverage(
|
||||||
|
'xdebug2',
|
||||||
|
'7.4',
|
||||||
|
'darwin'
|
||||||
|
);
|
||||||
|
expect(darwin).toContain('add_brew_extension xdebug2');
|
||||||
|
});
|
||||||
|
|
||||||
|
it('checking disableCoverage windows', async () => {
|
||||||
|
const win32 = await coverage.addCoverage('none', '7.4', 'win32');
|
||||||
|
expect(win32).toContain('Remove-Extension xdebug');
|
||||||
|
expect(win32).toContain('Remove-Extension pcov');
|
||||||
|
});
|
||||||
|
|
||||||
|
it('checking disableCoverage on linux', async () => {
|
||||||
|
const linux: string = await coverage.addCoverage('none', '7.4', 'linux');
|
||||||
|
expect(linux).toContain('remove_extension xdebug');
|
||||||
|
expect(linux).toContain('remove_extension pcov');
|
||||||
|
});
|
||||||
|
|
||||||
|
it('checking disableCoverage on darwin', async () => {
|
||||||
|
const darwin: string = await coverage.addCoverage('none', '7.4', 'darwin');
|
||||||
|
expect(darwin).toContain('remove_extension xdebug');
|
||||||
|
expect(darwin).toContain('remove_extension pcov');
|
||||||
|
});
|
||||||
|
|
||||||
|
it('checking no or invalid coverage driver', async () => {
|
||||||
|
let nocov: string = await coverage.addCoverage('nocov', '7.x', 'any');
|
||||||
|
expect(nocov).toEqual('');
|
||||||
|
|
||||||
|
nocov = await coverage.addCoverage('', '7.x', 'any');
|
||||||
|
expect(nocov).toEqual('');
|
||||||
|
});
|
||||||
});
|
});
|
||||||
|
|||||||
@@ -1,162 +1,224 @@
|
|||||||
import * as fs from 'fs';
|
|
||||||
import * as extensions from '../src/extensions';
|
import * as extensions from '../src/extensions';
|
||||||
|
|
||||||
describe('Extension tests', () => {
|
describe('Extension tests', () => {
|
||||||
it.each`
|
it('checking addExtensionOnWindows', async () => {
|
||||||
extension | version | output
|
let win32: string = await extensions.addExtension(
|
||||||
${'none'} | ${'7.4'} | ${'Disable-AllShared'}
|
'Xdebug, pcov, sqlite, :intl, phalcon4, ioncube, oci8, pdo_oci, ast-beta, grpc-1.2.3, inotify-1.2.3alpha2, sqlsrv-1.2.3preview1',
|
||||||
${':intl'} | ${'7.4'} | ${'Disable-Extension intl'}
|
'7.4',
|
||||||
${'ast-beta'} | ${'7.4'} | ${'Add-Extension ast beta'}
|
'win32'
|
||||||
${'blackfire'} | ${'7.3'} | ${'Add-Blackfire blackfire'}
|
);
|
||||||
${'blackfire-1.31.0'} | ${'7.3'} | ${'Add-Blackfire blackfire-1.31.0'}
|
expect(win32).toContain('Add-Extension xdebug');
|
||||||
${'grpc-1.2.3'} | ${'7.4'} | ${'Add-Extension grpc stable 1.2.3'}
|
expect(win32).toContain('Add-Extension pcov');
|
||||||
${'inotify-1.2.3alpha2'} | ${'7.4'} | ${'Add-Extension inotify alpha 1.2.3'}
|
expect(win32).toContain('Add-Extension sqlite3');
|
||||||
${'ioncube'} | ${'7.4'} | ${'Add-Ioncube'}
|
expect(win32).toContain('Remove-Extension intl');
|
||||||
${'mongodb-mongodb/mongo-php-driver@master'} | ${'7.3'} | ${'Add-Log "$cross" "mongodb-mongodb/mongo-php-driver@master" "mongodb-mongodb/mongo-php-driver@master is not supported on PHP 7.3"'}
|
expect(win32).toContain('Add-Phalcon phalcon4');
|
||||||
${'mysql'} | ${'7.4'} | ${'Add-Extension mysqli\nAdd-Extension mysqlnd'}
|
expect(win32).toContain('Add-Ioncube');
|
||||||
${'mysql'} | ${'5.5'} | ${'Add-Extension mysql\nAdd-Extension mysqli\nAdd-Extension mysqlnd'}
|
expect(win32).toContain('Add-Oci oci8');
|
||||||
${'oci8'} | ${'7.4'} | ${'Add-Oci oci8'}
|
expect(win32).toContain('Add-Oci pdo_oci');
|
||||||
${'pcov'} | ${'5.6'} | ${'Add-Log "$cross" "pcov" "pcov is not supported on PHP 5.6"'}
|
expect(win32).toContain('Add-Extension ast beta');
|
||||||
${'pdo_oci'} | ${'7.4'} | ${'Add-Oci pdo_oci'}
|
expect(win32).toContain('Add-Extension grpc stable 1.2.3');
|
||||||
${'ibm_db2'} | ${'7.4'} | ${'Add-Ibm ibm_db2'}
|
expect(win32).toContain('Add-Extension inotify alpha 1.2.3');
|
||||||
${'pdo_ibm'} | ${'7.4'} | ${'Add-Ibm pdo_ibm'}
|
expect(win32).toContain('Add-Extension sqlsrv devel 1.2.3');
|
||||||
${'pecl_http'} | ${'7.4'} | ${'Add-Http'}
|
|
||||||
${'http'} | ${'8.5'} | ${'Add-Http'}
|
win32 = await extensions.addExtension('pcov', '5.6', 'win32');
|
||||||
${'pdo_sqlsrv'} | ${'7.4'} | ${'Add-Sqlsrv pdo_sqlsrv'}
|
expect(win32).toContain(
|
||||||
${'phalcon3'} | ${'7.2'} | ${'Add-Phalcon phalcon3'}
|
'Add-Log "$cross" "pcov" "pcov is not supported on PHP 5.6"'
|
||||||
${'phalcon4'} | ${'7.4'} | ${'Add-Phalcon phalcon4'}
|
|
||||||
${'sqlite'} | ${'7.4'} | ${'Add-Extension sqlite3'}
|
|
||||||
${'sqlsrv'} | ${'5.6'} | ${'Add-Extension sqlsrv'}
|
|
||||||
${'sqlsrv'} | ${'7.4'} | ${'Add-Sqlsrv sqlsrv'}
|
|
||||||
${'sqlsrv-1.2.3preview1'} | ${'7.4'} | ${'Add-Extension sqlsrv devel 1.2.3'}
|
|
||||||
${'Xdebug'} | ${'7.4'} | ${'Add-Extension xdebug'}
|
|
||||||
${'xdebug2'} | ${'7.2'} | ${'Add-Extension xdebug stable 2.9.8'}
|
|
||||||
${'zephir_parser'} | ${'7.2'} | ${'Add-ZephirParser zephir_parser'}
|
|
||||||
`(
|
|
||||||
'checking addExtensionOnWindows for extension $extension on version $version',
|
|
||||||
async ({extension, version, output}) => {
|
|
||||||
expect(
|
|
||||||
await extensions.addExtension(extension, version, 'win32')
|
|
||||||
).toContain(output);
|
|
||||||
}
|
|
||||||
);
|
);
|
||||||
|
|
||||||
it.each`
|
win32 = await extensions.addExtension('xdebug2', '7.2', 'win32');
|
||||||
extension | version | output
|
expect(win32).toContain('Add-Extension xdebug stable 2.9.8');
|
||||||
${'none'} | ${'7.4'} | ${'disable_all_shared'}
|
|
||||||
${':intl'} | ${'7.4'} | ${'disable_extension intl'}
|
|
||||||
${'ast-beta'} | ${'7.4'} | ${'add_unstable_extension ast beta extension'}
|
|
||||||
${'blackfire'} | ${'7.3'} | ${'add_blackfire blackfire'}
|
|
||||||
${'blackfire-1.31.0'} | ${'7.3'} | ${'add_blackfire blackfire-1.31.0'}
|
|
||||||
${'couchbase'} | ${'7.4'} | ${'add_couchbase'}
|
|
||||||
${'gearman'} | ${'5.6'} | ${'add_gearman'}
|
|
||||||
${'geos'} | ${'7.3'} | ${'add_geos'}
|
|
||||||
${'grpc-1.2.3'} | ${'7.4'} | ${'add_pecl_extension grpc 1.2.3 extension'}
|
|
||||||
${'http-1.2.3'} | ${'7.3'} | ${'add_http http-1.2.3'}
|
|
||||||
${'intl-65.1'} | ${'5.6'} | ${'add_intl intl-65.1'}
|
|
||||||
${'ioncube'} | ${'7.3'} | ${'add_ioncube'}
|
|
||||||
${'memcache-8.2'} | ${'8.2'} | ${'add_pecl_extension memcache 8.2 extension'}
|
|
||||||
${'mongodb-mongodb/mongo-php-driver@master'} | ${'7.3'} | ${'add_extension_from_source mongodb https://github.com mongodb mongo-php-driver master extension'}
|
|
||||||
${'oci8'} | ${'7.3'} | ${'add_oci oci8'}
|
|
||||||
${'pcov'} | ${'5.6'} | ${'add_log "$cross" "pcov" "pcov is not supported on PHP 5.6'}
|
|
||||||
${'ibm_db2'} | ${'7.3'} | ${'add_ibm ibm_db2'}
|
|
||||||
${'pdo-odbc'} | ${'7.4'} | ${'add_pdo_extension odbc'}
|
|
||||||
${'pdo_cubrid'} | ${'7.0'} | ${'add_cubrid pdo_cubrid'}
|
|
||||||
${'pdo_cubrid'} | ${'7.4'} | ${'add_pdo_extension cubrid'}
|
|
||||||
${'pdo_mysql'} | ${'7.4'} | ${'add_pdo_extension mysql'}
|
|
||||||
${'pdo_oci'} | ${'7.3'} | ${'add_oci pdo_oci'}
|
|
||||||
${'pdo_ibm'} | ${'7.3'} | ${'add_ibm pdo_ibm'}
|
|
||||||
${'pdo_sqlsrv'} | ${'7.4'} | ${'add_sqlsrv pdo_sqlsrv'}
|
|
||||||
${'pecl_http'} | ${'7.3'} | ${'add_http'}
|
|
||||||
${'phalcon3'} | ${'7.3'} | ${'add_phalcon phalcon3'}
|
|
||||||
${'relay'} | ${'7.4'} | ${'add_relay relay'}
|
|
||||||
${'relay-v1.2.3'} | ${'7.4'} | ${'add_relay relay-v1.2.3'}
|
|
||||||
${'sqlite'} | ${'7.4'} | ${'add_extension sqlite3'}
|
|
||||||
${'sqlsrv-1.2.3-beta1'} | ${'7.4'} | ${'add_pecl_extension sqlsrv 1.2.3beta1 extension'}
|
|
||||||
${'Xdebug'} | ${'7.4'} | ${'add_extension xdebug'}
|
|
||||||
${'xdebug-alpha'} | ${'7.4'} | ${'add_unstable_extension xdebug alpha zend_extension'}
|
|
||||||
${'xdebug2'} | ${'7.2'} | ${'add_pecl_extension xdebug 2.9.8 zend_extension'}
|
|
||||||
${'zephir_parser-1.2.3'} | ${'7.2'} | ${'add_zephir_parser zephir_parser-1.2.3'}
|
|
||||||
`(
|
|
||||||
'checking addExtensionOnLinux for extension $extension on version $version',
|
|
||||||
async ({extension, version, output}) => {
|
|
||||||
expect(
|
|
||||||
await extensions.addExtension(extension, version, 'linux')
|
|
||||||
).toContain(output);
|
|
||||||
}
|
|
||||||
);
|
|
||||||
|
|
||||||
it.each`
|
win32 = await extensions.addExtension('mysql', '7.4', 'win32');
|
||||||
extension | version | output
|
expect(win32).toContain('Add-Extension mysqli');
|
||||||
${'none'} | ${'7.2'} | ${'disable_all_shared'}
|
expect(win32).toContain('Add-Extension mysqlnd');
|
||||||
${':intl'} | ${'7.2'} | ${'disable_extension intl'}
|
|
||||||
${'ast-beta'} | ${'7.2'} | ${'add_unstable_extension ast beta extension'}
|
|
||||||
${'blackfire'} | ${'7.3'} | ${'add_blackfire blackfire'}
|
|
||||||
${'blackfire-1.31.0'} | ${'7.3'} | ${'add_blackfire blackfire-1.31.0'}
|
|
||||||
${'couchbase'} | ${'5.6'} | ${'add_couchbase'}
|
|
||||||
${'does_not_exist'} | ${'7.2'} | ${'add_extension does_not_exist'}
|
|
||||||
${'geos'} | ${'7.3'} | ${'add_geos'}
|
|
||||||
${'grpc-1.2.3'} | ${'7.2'} | ${'add_pecl_extension grpc 1.2.3 extension'}
|
|
||||||
${'http-1.2.3'} | ${'7.3'} | ${'add_http http-1.2.3'}
|
|
||||||
${'imagick'} | ${'5.5'} | ${'add_extension imagick'}
|
|
||||||
${'ioncube'} | ${'7.3'} | ${'add_ioncube'}
|
|
||||||
${'mongodb-mongodb/mongo-php-driver@master'} | ${'7.2'} | ${'add_extension_from_source mongodb https://github.com mongodb mongo-php-driver master extension'}
|
|
||||||
${'oci8'} | ${'7.3'} | ${'add_oci oci8'}
|
|
||||||
${'pcov'} | ${'5.6'} | ${'add_log "$cross" "pcov" "pcov is not supported on PHP 5.6"'}
|
|
||||||
${'pdo_oci'} | ${'7.3'} | ${'add_oci pdo_oci'}
|
|
||||||
${'pecl_http'} | ${'7.3'} | ${'add_http'}
|
|
||||||
${'relay-1.2.3'} | ${'7.4'} | ${'add_relay relay-1.2.3'}
|
|
||||||
${'sqlite'} | ${'7.2'} | ${'add_extension sqlite3'}
|
|
||||||
${'zephir_parser-v1.2.3'} | ${'7.2'} | ${'add_zephir_parser zephir_parser-v1.2.3'}
|
|
||||||
`(
|
|
||||||
'checking addExtensionOnDarwin for extension $extension on version $version',
|
|
||||||
async ({extension, version, output}) => {
|
|
||||||
expect(
|
|
||||||
await extensions.addExtension(extension, version, 'darwin')
|
|
||||||
).toContain(output);
|
|
||||||
}
|
|
||||||
);
|
|
||||||
|
|
||||||
const data: string[][] = fs
|
win32 = await extensions.addExtension('mysql', '8.0', 'win32');
|
||||||
.readFileSync('src/configs/brew_extensions')
|
expect(win32).toContain('Add-Extension mysqli');
|
||||||
.toString()
|
expect(win32).toContain('Add-Extension mysqlnd');
|
||||||
.split(/\r?\n/)
|
|
||||||
.filter(Boolean)
|
win32 = await extensions.addExtension('mysql', '5.5', 'win32');
|
||||||
.map(line => {
|
expect(win32).toContain('Add-Extension mysql');
|
||||||
const [formula, extension]: string[] = line.split('=');
|
expect(win32).toContain('Add-Extension mysqli');
|
||||||
const prefix: string =
|
expect(win32).toContain('Add-Extension mysqlnd');
|
||||||
extension == 'xdebug' ? 'zend_extension' : 'extension';
|
|
||||||
const ext_name = extension.replace(/\d+|(pdo|pecl)[_-]/, '');
|
win32 = await extensions.addExtension(
|
||||||
const output: string = fs.existsSync(
|
'phalcon3, does_not_exist',
|
||||||
`src/scripts/extensions/${ext_name}.sh`
|
'7.2',
|
||||||
)
|
'win32',
|
||||||
? `add_${ext_name}`
|
true
|
||||||
: `add_brew_extension ${formula} ${prefix}`;
|
);
|
||||||
return [
|
expect(win32).toContain('Add-Phalcon phalcon3');
|
||||||
formula,
|
expect(win32).toContain('Add-Extension does_not_exist');
|
||||||
formula.match(/phalcon3|lua|propro/) ? '7.3' : '8.1',
|
|
||||||
output
|
win32 = await extensions.addExtension('xdebug', '7.2', 'openbsd');
|
||||||
];
|
expect(win32).toContain('Platform openbsd is not supported');
|
||||||
|
|
||||||
|
win32 = await extensions.addExtension('blackfire', '7.3', 'win32');
|
||||||
|
expect(win32).toContain('Add-Blackfire blackfire');
|
||||||
|
|
||||||
|
win32 = await extensions.addExtension('blackfire-1.31.0', '7.3', 'win32');
|
||||||
|
expect(win32).toContain('Add-Blackfire blackfire-1.31.0');
|
||||||
});
|
});
|
||||||
|
|
||||||
it.each(data)(
|
it('checking addExtensionOnLinux', async () => {
|
||||||
'checking addExtensionOnDarwin for brew extension %s',
|
let linux: string = await extensions.addExtension(
|
||||||
async (extension, version, output) => {
|
'Xdebug, pcov, sqlite, :intl, ast, ast-beta, pdo_mysql, pdo-odbc, xdebug-alpha, grpc-1.2.3',
|
||||||
expect(
|
'7.4',
|
||||||
await extensions.addExtension(extension, version, 'darwin')
|
'linux'
|
||||||
).toContain(output);
|
);
|
||||||
}
|
expect(linux).toContain('add_extension xdebug');
|
||||||
|
expect(linux).toContain('add_extension sqlite3');
|
||||||
|
expect(linux).toContain('remove_extension intl');
|
||||||
|
expect(linux).toContain('add_unstable_extension ast beta extension');
|
||||||
|
expect(linux).toContain('add_pdo_extension mysql');
|
||||||
|
expect(linux).toContain('add_pdo_extension odbc');
|
||||||
|
expect(linux).toContain('add_pecl_extension grpc 1.2.3 extension');
|
||||||
|
expect(linux).toContain(
|
||||||
|
'add_unstable_extension xdebug alpha zend_extension'
|
||||||
);
|
);
|
||||||
|
|
||||||
it.each`
|
linux = await extensions.addExtension('pcov', '5.6', 'linux');
|
||||||
extension | version | output
|
expect(linux).toContain(
|
||||||
${'xdebug'} | ${'7.2'} | ${'Platform openbsd is not supported'}
|
'add_log "$cross" "pcov" "pcov is not supported on PHP 5.6"'
|
||||||
`(
|
|
||||||
'checking addExtension on openbsd for extension $extension on version $version',
|
|
||||||
async ({extension, version, output}) => {
|
|
||||||
expect(
|
|
||||||
await extensions.addExtension(extension, version, 'openbsd')
|
|
||||||
).toContain(output);
|
|
||||||
}
|
|
||||||
);
|
);
|
||||||
|
|
||||||
|
linux = await extensions.addExtension('gearman', '5.6', 'linux');
|
||||||
|
expect(linux).toContain('add_gearman');
|
||||||
|
linux = await extensions.addExtension('gearman', '7.4', 'linux');
|
||||||
|
expect(linux).toContain('add_gearman');
|
||||||
|
|
||||||
|
linux = await extensions.addExtension('couchbase', '5.6', 'linux');
|
||||||
|
expect(linux).toContain('add_couchbase');
|
||||||
|
linux = await extensions.addExtension('couchbase', '7.4', 'linux');
|
||||||
|
expect(linux).toContain('add_couchbase');
|
||||||
|
|
||||||
|
linux = await extensions.addExtension('pdo_cubrid', '7.0', 'linux');
|
||||||
|
expect(linux).toContain('add_cubrid pdo_cubrid');
|
||||||
|
linux = await extensions.addExtension('cubrid', '7.4', 'linux');
|
||||||
|
expect(linux).toContain('add_cubrid cubrid');
|
||||||
|
|
||||||
|
linux = await extensions.addExtension('xdebug2', '7.2', 'linux');
|
||||||
|
expect(linux).toContain('add_pecl_extension xdebug 2.9.8 zend_extension');
|
||||||
|
|
||||||
|
linux = await extensions.addExtension('xdebug', '7.2', 'openbsd');
|
||||||
|
expect(linux).toContain('Platform openbsd is not supported');
|
||||||
|
|
||||||
|
linux = await extensions.addExtension('phalcon3, phalcon4', '7.3', 'linux');
|
||||||
|
expect(linux).toContain('add_phalcon phalcon3');
|
||||||
|
expect(linux).toContain('add_phalcon phalcon4');
|
||||||
|
|
||||||
|
linux = await extensions.addExtension('ioncube', '7.3', 'linux');
|
||||||
|
expect(linux).toContain('add_ioncube');
|
||||||
|
|
||||||
|
linux = await extensions.addExtension('geos', '7.3', 'linux');
|
||||||
|
expect(linux).toContain('add_geos');
|
||||||
|
|
||||||
|
linux = await extensions.addExtension('oci8, pdo_oci', '7.3', 'linux');
|
||||||
|
expect(linux).toContain('add_oci oci8');
|
||||||
|
expect(linux).toContain('add_oci pdo_oci');
|
||||||
|
|
||||||
|
linux = await extensions.addExtension('blackfire', '7.3', 'linux');
|
||||||
|
expect(linux).toContain('add_blackfire blackfire');
|
||||||
|
|
||||||
|
linux = await extensions.addExtension('blackfire-1.31.0', '7.3', 'linux');
|
||||||
|
expect(linux).toContain('add_blackfire blackfire-1.31.0');
|
||||||
|
|
||||||
|
linux = await extensions.addExtension('intl-65.1', '5.6', 'linux');
|
||||||
|
expect(linux).toContain('add_intl intl-65.1');
|
||||||
|
|
||||||
|
linux = await extensions.addExtension('intl-67.1', '7.3', 'linux');
|
||||||
|
expect(linux).toContain('add_intl intl-67.1');
|
||||||
|
|
||||||
|
linux = await extensions.addExtension('intl-68.2', '8.0', 'linux');
|
||||||
|
expect(linux).toContain('add_intl intl-68.2');
|
||||||
|
});
|
||||||
|
|
||||||
|
it('checking addExtensionOnDarwin', async () => {
|
||||||
|
let darwin: string = await extensions.addExtension(
|
||||||
|
'amqp, Xdebug, pcov, grpc, igbinary, imagick, imap, protobuf, swoole, sqlite, oci8, pdo_oci, :intl, ast-beta, grpc-1.2.3',
|
||||||
|
'7.2',
|
||||||
|
'darwin'
|
||||||
|
);
|
||||||
|
expect(darwin).toContain('add_brew_extension amqp extension');
|
||||||
|
expect(darwin).toContain('add_brew_extension xdebug zend_extension');
|
||||||
|
expect(darwin).toContain('add_brew_extension pcov extension');
|
||||||
|
expect(darwin).toContain('add_brew_extension grpc extension');
|
||||||
|
expect(darwin).toContain('add_brew_extension igbinary extension');
|
||||||
|
expect(darwin).toContain('add_brew_extension imagick extension');
|
||||||
|
expect(darwin).toContain('add_brew_extension imap extension');
|
||||||
|
expect(darwin).toContain('add_brew_extension protobuf extension');
|
||||||
|
expect(darwin).toContain('add_brew_extension swoole extension');
|
||||||
|
expect(darwin).toContain('add_extension sqlite3');
|
||||||
|
expect(darwin).toContain('remove_extension intl');
|
||||||
|
expect(darwin).toContain('add_unstable_extension ast beta extension');
|
||||||
|
expect(darwin).toContain('add_pecl_extension grpc 1.2.3 extension');
|
||||||
|
|
||||||
|
darwin = await extensions.addExtension('phalcon3', '7.0', 'darwin');
|
||||||
|
expect(darwin).toContain('add_phalcon phalcon3');
|
||||||
|
|
||||||
|
darwin = await extensions.addExtension('phalcon4', '7.3', 'darwin');
|
||||||
|
expect(darwin).toContain('add_phalcon phalcon4');
|
||||||
|
|
||||||
|
darwin = await extensions.addExtension('couchbase', '5.6', 'darwin');
|
||||||
|
expect(darwin).toContain('add_couchbase');
|
||||||
|
|
||||||
|
darwin = await extensions.addExtension('couchbase', '7.3', 'darwin');
|
||||||
|
expect(darwin).toContain('add_couchbase');
|
||||||
|
|
||||||
|
darwin = await extensions.addExtension('ioncube', '7.3', 'darwin');
|
||||||
|
expect(darwin).toContain('add_ioncube');
|
||||||
|
|
||||||
|
darwin = await extensions.addExtension('geos', '7.3', 'darwin');
|
||||||
|
expect(darwin).toContain('add_geos');
|
||||||
|
|
||||||
|
darwin = await extensions.addExtension('oci8, pdo_oci', '7.3', 'darwin');
|
||||||
|
expect(darwin).toContain('add_oci oci8');
|
||||||
|
expect(darwin).toContain('add_oci pdo_oci');
|
||||||
|
|
||||||
|
darwin = await extensions.addExtension('pcov', '5.6', 'darwin');
|
||||||
|
expect(darwin).toContain(
|
||||||
|
'add_log "$cross" "pcov" "pcov is not supported on PHP 5.6"'
|
||||||
|
);
|
||||||
|
|
||||||
|
darwin = await extensions.addExtension('pcov', '7.2', 'darwin');
|
||||||
|
expect(darwin).toContain('add_brew_extension pcov');
|
||||||
|
|
||||||
|
darwin = await extensions.addExtension('xdebug', '5.6', 'darwin');
|
||||||
|
expect(darwin).toContain('add_brew_extension xdebug');
|
||||||
|
|
||||||
|
darwin = await extensions.addExtension('xdebug', '7.0', 'darwin');
|
||||||
|
expect(darwin).toContain('add_brew_extension xdebug');
|
||||||
|
|
||||||
|
darwin = await extensions.addExtension('xdebug', '7.2', 'darwin');
|
||||||
|
expect(darwin).toContain('add_brew_extension xdebug');
|
||||||
|
|
||||||
|
darwin = await extensions.addExtension('xdebug2', '7.2', 'darwin');
|
||||||
|
expect(darwin).toContain('add_brew_extension xdebug2');
|
||||||
|
|
||||||
|
darwin = await extensions.addExtension('redis', '5.6', 'darwin');
|
||||||
|
expect(darwin).toContain('add_extension redis-2.2.8');
|
||||||
|
|
||||||
|
darwin = await extensions.addExtension('redis', '7.2', 'darwin');
|
||||||
|
expect(darwin).toContain('add_extension redis');
|
||||||
|
|
||||||
|
darwin = await extensions.addExtension('imagick', '5.5', 'darwin');
|
||||||
|
expect(darwin).toContain('add_extension imagick');
|
||||||
|
|
||||||
|
darwin = await extensions.addExtension('blackfire', '7.3', 'darwin');
|
||||||
|
expect(darwin).toContain('add_blackfire blackfire');
|
||||||
|
|
||||||
|
darwin = await extensions.addExtension('blackfire-1.31.0', '7.3', 'darwin');
|
||||||
|
expect(darwin).toContain('add_blackfire blackfire-1.31.0');
|
||||||
|
|
||||||
|
darwin = await extensions.addExtension(
|
||||||
|
'does_not_exist',
|
||||||
|
'7.2',
|
||||||
|
'darwin',
|
||||||
|
false
|
||||||
|
);
|
||||||
|
expect(darwin).toContain('add_extension does_not_exist');
|
||||||
|
|
||||||
|
darwin = await extensions.addExtension('xdebug', '7.2', 'openbsd');
|
||||||
|
expect(darwin).toContain('Platform openbsd is not supported');
|
||||||
|
});
|
||||||
});
|
});
|
||||||
|
|||||||
@@ -1,45 +0,0 @@
|
|||||||
import * as fetch from '../src/fetch';
|
|
||||||
import nock from 'nock';
|
|
||||||
|
|
||||||
it('checking fetch', async () => {
|
|
||||||
const host_url = 'https://example.com';
|
|
||||||
const manifest_url = host_url + '/manifest';
|
|
||||||
const ping_url = host_url + '/ping';
|
|
||||||
|
|
||||||
nock(host_url)
|
|
||||||
.get('/manifest')
|
|
||||||
.reply(200, {latest: 'latest'})
|
|
||||||
.get('/manifest', '', {
|
|
||||||
reqheaders: {authorization: 'Bearer invalid_token'}
|
|
||||||
})
|
|
||||||
.reply(401, {error: '401: Unauthorized'})
|
|
||||||
.get('/ping')
|
|
||||||
.twice()
|
|
||||||
.reply(301, undefined, {
|
|
||||||
Location: host_url + '/pong'
|
|
||||||
})
|
|
||||||
.get('/pong')
|
|
||||||
.reply(200, 'pong')
|
|
||||||
.get('/error')
|
|
||||||
.replyWithError('Network failure');
|
|
||||||
|
|
||||||
let response: Record<string, string> = await fetch.fetch(manifest_url);
|
|
||||||
expect(response.error).toBe(undefined);
|
|
||||||
expect(response.data).toContain('latest');
|
|
||||||
|
|
||||||
response = await fetch.fetch(ping_url, '', 1);
|
|
||||||
expect(response.error).toBe(undefined);
|
|
||||||
expect(response.data).toContain('pong');
|
|
||||||
|
|
||||||
response = await fetch.fetch(ping_url, '', 0);
|
|
||||||
expect(response.error).toBe('301: Redirect error');
|
|
||||||
expect(response.data).toBe(undefined);
|
|
||||||
|
|
||||||
response = await fetch.fetch(manifest_url, 'invalid_token');
|
|
||||||
expect(response.error).not.toBe(undefined);
|
|
||||||
expect(response.data).toBe(undefined);
|
|
||||||
|
|
||||||
response = await fetch.fetch(host_url + '/error');
|
|
||||||
expect(response.error).toContain('Fetch error:');
|
|
||||||
expect(response.data).toBe(undefined);
|
|
||||||
});
|
|
||||||
@@ -5,83 +5,171 @@ import * as utils from '../src/utils';
|
|||||||
* Mock install.ts
|
* Mock install.ts
|
||||||
*/
|
*/
|
||||||
jest.mock('../src/install', () => ({
|
jest.mock('../src/install', () => ({
|
||||||
getScript: jest
|
getScript: jest.fn().mockImplementation(
|
||||||
.fn()
|
async (
|
||||||
.mockImplementation(async (os: string): Promise<string> => {
|
filename: string,
|
||||||
const filename = os + (await utils.scriptExtension(os));
|
version: string,
|
||||||
const version: string = await utils.parseVersion(
|
os_version: string
|
||||||
await utils.readPHPVersion()
|
): Promise<string> => {
|
||||||
);
|
|
||||||
const ini_file: string = await utils.parseIniFile(
|
|
||||||
await utils.getInput('ini-file', false)
|
|
||||||
);
|
|
||||||
const extension_csv: string = process.env['extensions'] || '';
|
const extension_csv: string = process.env['extensions'] || '';
|
||||||
const ini_values_csv: string = process.env['ini-values'] || '';
|
const ini_values_csv: string = process.env['ini-values'] || '';
|
||||||
const coverage_driver: string = process.env['coverage'] || '';
|
const coverage_driver: string = process.env['coverage'] || '';
|
||||||
const tools_csv: string = process.env['tools'] || '';
|
let tools_csv: string = process.env['tools'] || '';
|
||||||
let script = await utils.joins(filename, version, ini_file);
|
const pecl: string = process.env['pecl'] || '';
|
||||||
script += extension_csv ? ' install extensions' : '';
|
if (pecl == 'true') {
|
||||||
script += tools_csv ? ' add_tool' : '';
|
tools_csv = 'pecl, ' + tools_csv;
|
||||||
script += coverage_driver ? ' set coverage driver' : '';
|
}
|
||||||
script += ini_values_csv ? ' edit php.ini' : '';
|
|
||||||
|
let script = 'initial script ' + filename + version + os_version;
|
||||||
|
if (tools_csv) {
|
||||||
|
script += 'add_tool';
|
||||||
|
}
|
||||||
|
if (extension_csv) {
|
||||||
|
script += 'install extensions';
|
||||||
|
}
|
||||||
|
if (coverage_driver) {
|
||||||
|
script += 'set coverage driver';
|
||||||
|
}
|
||||||
|
if (ini_values_csv) {
|
||||||
|
script += 'edit php.ini';
|
||||||
|
}
|
||||||
|
|
||||||
return script;
|
return script;
|
||||||
}),
|
}
|
||||||
run: jest.fn().mockImplementation(async (): Promise<string> => {
|
),
|
||||||
const os: string = process.env['RUNNER_OS'] || '';
|
run: jest.fn().mockImplementation(
|
||||||
const tool = await utils.scriptTool(os);
|
async (): Promise<string> => {
|
||||||
return tool + (await install.getScript(os));
|
const os_version: string = process.env['RUNNER_OS'] || '';
|
||||||
})
|
const version: string = await utils.parseVersion(
|
||||||
|
await utils.getInput('php-version', true)
|
||||||
|
);
|
||||||
|
const tool = await utils.scriptTool(os_version);
|
||||||
|
const filename = os_version + (await utils.scriptExtension(os_version));
|
||||||
|
return [
|
||||||
|
await install.getScript(filename, version, os_version),
|
||||||
|
tool,
|
||||||
|
filename,
|
||||||
|
version,
|
||||||
|
__dirname
|
||||||
|
].join(' ');
|
||||||
|
}
|
||||||
|
)
|
||||||
}));
|
}));
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Mock fetch.ts
|
* Function to set the process.env
|
||||||
|
*
|
||||||
|
* @param version
|
||||||
|
* @param os
|
||||||
|
* @param extension_csv
|
||||||
|
* @param ini_values_csv
|
||||||
|
* @param coverage_driver
|
||||||
|
* @param tools
|
||||||
*/
|
*/
|
||||||
jest.mock('../src/fetch', () => ({
|
function setEnv(
|
||||||
fetch: jest.fn().mockImplementation(() => {
|
version: string | number,
|
||||||
return {
|
os: string,
|
||||||
data: '{ "latest": "8.3", "lowest": "8.1", "highest": "8.3", "nightly": "8.4", "5.x": "5.6" }'
|
extension_csv: string,
|
||||||
};
|
ini_values_csv: string,
|
||||||
})
|
coverage_driver: string,
|
||||||
}));
|
tools: string
|
||||||
|
): void {
|
||||||
describe('Install', () => {
|
|
||||||
it.each`
|
|
||||||
version | os | extension_csv | ini_file | ini_values_csv | coverage_driver | tools | output
|
|
||||||
${'7.3'} | ${'darwin'} | ${''} | ${'production'} | ${''} | ${''} | ${''} | ${'bash darwin.sh 7.3 production'}
|
|
||||||
${'7.3'} | ${'darwin'} | ${'a, b'} | ${'development'} | ${'a=b'} | ${'x'} | ${''} | ${'bash darwin.sh 7.3 development install extensions set coverage driver edit php.ini'}
|
|
||||||
${'7.4.1'} | ${'darwin'} | ${''} | ${'none'} | ${''} | ${''} | ${''} | ${'bash darwin.sh 7.4 none'}
|
|
||||||
${'8'} | ${'darwin'} | ${''} | ${''} | ${''} | ${''} | ${''} | ${'bash darwin.sh 8.0 production'}
|
|
||||||
${'8.0'} | ${'darwin'} | ${''} | ${'development'} | ${''} | ${''} | ${''} | ${'bash darwin.sh 8.0 development'}
|
|
||||||
${'8.1'} | ${'darwin'} | ${''} | ${'none'} | ${''} | ${''} | ${''} | ${'bash darwin.sh 8.1 none'}
|
|
||||||
${'7.3'} | ${'linux'} | ${''} | ${'invalid'} | ${''} | ${''} | ${''} | ${'bash linux.sh 7.3 production'}
|
|
||||||
${'7.3'} | ${'linux'} | ${'a, b'} | ${'development'} | ${'a=b'} | ${'x'} | ${'phpunit'} | ${'bash linux.sh 7.3 development install extensions add_tool set coverage driver edit php.ini'}
|
|
||||||
${'latest'} | ${'linux'} | ${''} | ${'none'} | ${''} | ${''} | ${''} | ${'bash linux.sh 8.3 none'}
|
|
||||||
${'lowest'} | ${'linux'} | ${''} | ${'none'} | ${''} | ${''} | ${''} | ${'bash linux.sh 8.1 none'}
|
|
||||||
${'highest'} | ${'linux'} | ${''} | ${'none'} | ${''} | ${''} | ${''} | ${'bash linux.sh 8.3 none'}
|
|
||||||
${'nightly'} | ${'linux'} | ${''} | ${'none'} | ${''} | ${''} | ${''} | ${'bash linux.sh 8.4 none'}
|
|
||||||
${'7.0'} | ${'win32'} | ${''} | ${'production'} | ${''} | ${''} | ${''} | ${'pwsh win32.ps1 7.0 production'}
|
|
||||||
${'7.3'} | ${'win32'} | ${''} | ${'development'} | ${''} | ${''} | ${''} | ${'pwsh win32.ps1 7.3 development'}
|
|
||||||
${'7.3'} | ${'win32'} | ${'a, b'} | ${'none'} | ${'a=b'} | ${'x'} | ${''} | ${'pwsh win32.ps1 7.3 none install extensions set coverage driver edit php.ini'}
|
|
||||||
`(
|
|
||||||
'Test install on $os for $version with extensions=$extension_csv, ini_values=$ini_values_csv, coverage_driver=$coverage_driver, tools=$tools',
|
|
||||||
async ({
|
|
||||||
version,
|
|
||||||
os,
|
|
||||||
extension_csv,
|
|
||||||
ini_file,
|
|
||||||
ini_values_csv,
|
|
||||||
coverage_driver,
|
|
||||||
tools,
|
|
||||||
output
|
|
||||||
}) => {
|
|
||||||
process.env['php-version'] = version.toString();
|
process.env['php-version'] = version.toString();
|
||||||
process.env['RUNNER_OS'] = os;
|
process.env['RUNNER_OS'] = os;
|
||||||
process.env['extensions'] = extension_csv;
|
process.env['extensions'] = extension_csv;
|
||||||
process.env['ini-file'] = ini_file;
|
|
||||||
process.env['ini-values'] = ini_values_csv;
|
process.env['ini-values'] = ini_values_csv;
|
||||||
process.env['coverage'] = coverage_driver;
|
process.env['coverage'] = coverage_driver;
|
||||||
process.env['tools'] = tools;
|
process.env['tools'] = tools;
|
||||||
expect(await install.run()).toBe(output);
|
|
||||||
}
|
}
|
||||||
);
|
|
||||||
|
describe('Install', () => {
|
||||||
|
it('Test install on windows', async () => {
|
||||||
|
setEnv('7.0', 'win32', '', '', '', '');
|
||||||
|
|
||||||
|
let script: string = '' + (await install.run());
|
||||||
|
expect(script).toContain('initial script');
|
||||||
|
expect(script).toContain('pwsh win32.ps1 7.0 ' + __dirname);
|
||||||
|
|
||||||
|
setEnv('7.3', 'win32', '', '', '', '');
|
||||||
|
|
||||||
|
script = '' + (await install.run());
|
||||||
|
expect(script).toContain('initial script');
|
||||||
|
expect(script).toContain('pwsh win32.ps1 7.3 ' + __dirname);
|
||||||
|
|
||||||
|
setEnv('7.3', 'win32', 'a, b', 'a=b', 'x', '');
|
||||||
|
|
||||||
|
script = '' + (await install.run());
|
||||||
|
expect(script).toContain('initial script');
|
||||||
|
expect(script).toContain('install extensions');
|
||||||
|
expect(script).toContain('edit php.ini');
|
||||||
|
expect(script).toContain('set coverage driver');
|
||||||
|
expect(script).toContain('pwsh win32.ps1 7.3 ' + __dirname);
|
||||||
|
});
|
||||||
|
|
||||||
|
it('Test install on linux', async () => {
|
||||||
|
setEnv('7.3', 'linux', '', '', '', '');
|
||||||
|
|
||||||
|
let script: string = '' + (await install.run());
|
||||||
|
expect(script).toContain('initial script');
|
||||||
|
expect(script).toContain('bash linux.sh 7.3 ');
|
||||||
|
|
||||||
|
setEnv('latest', 'linux', '', '', '', '');
|
||||||
|
|
||||||
|
script = '' + (await install.run());
|
||||||
|
expect(script).toContain('initial script');
|
||||||
|
expect(script).toContain('bash linux.sh 8.0 ');
|
||||||
|
|
||||||
|
setEnv('7.3', 'linux', 'a, b', 'a=b', 'x', 'phpunit');
|
||||||
|
|
||||||
|
script = '' + (await install.run());
|
||||||
|
expect(script).toContain('initial script');
|
||||||
|
expect(script).toContain('install extensions');
|
||||||
|
expect(script).toContain('edit php.ini');
|
||||||
|
expect(script).toContain('set coverage driver');
|
||||||
|
expect(script).toContain('bash linux.sh 7.3');
|
||||||
|
expect(script).toContain('add_tool');
|
||||||
|
});
|
||||||
|
|
||||||
|
it('Test install on darwin', async () => {
|
||||||
|
setEnv('7.3', 'darwin', '', '', '', '');
|
||||||
|
|
||||||
|
let script: string = '' + (await install.run());
|
||||||
|
expect(script).toContain('initial script');
|
||||||
|
expect(script).toContain('bash darwin.sh 7.3 ' + __dirname);
|
||||||
|
|
||||||
|
setEnv('7.3', 'darwin', 'a, b', 'a=b', 'x', '');
|
||||||
|
|
||||||
|
script = '' + (await install.run());
|
||||||
|
expect(script).toContain('initial script');
|
||||||
|
expect(script).toContain('install extensions');
|
||||||
|
expect(script).toContain('edit php.ini');
|
||||||
|
expect(script).toContain('set coverage driver');
|
||||||
|
expect(script).toContain('bash darwin.sh 7.3 ' + __dirname);
|
||||||
|
});
|
||||||
|
|
||||||
|
it('Test malformed version inputs', async () => {
|
||||||
|
setEnv('7.4.1', 'darwin', '', '', '', '');
|
||||||
|
|
||||||
|
let script: string = '' + '' + (await install.run());
|
||||||
|
expect(script).toContain('initial script');
|
||||||
|
expect(script).toContain('bash darwin.sh 7.4 ' + __dirname);
|
||||||
|
|
||||||
|
setEnv(8.0, 'darwin', '', '', '', '');
|
||||||
|
|
||||||
|
script = '' + (await install.run());
|
||||||
|
expect(script).toContain('initial script');
|
||||||
|
expect(script).toContain('bash darwin.sh 8.0 ' + __dirname);
|
||||||
|
|
||||||
|
setEnv(8, 'darwin', '', '', '', '');
|
||||||
|
|
||||||
|
script = '' + (await install.run());
|
||||||
|
expect(script).toContain('initial script');
|
||||||
|
expect(script).toContain('bash darwin.sh 8.0 ' + __dirname);
|
||||||
|
|
||||||
|
setEnv(8.1, 'darwin', '', '', '', '');
|
||||||
|
|
||||||
|
script = '' + (await install.run());
|
||||||
|
expect(script).toContain('initial script');
|
||||||
|
expect(script).toContain('bash darwin.sh 8.1 ' + __dirname);
|
||||||
|
});
|
||||||
});
|
});
|
||||||
|
|||||||
@@ -1,50 +0,0 @@
|
|||||||
import * as packagist from '../src/packagist';
|
|
||||||
import nock from 'nock';
|
|
||||||
|
|
||||||
describe('search function', () => {
|
|
||||||
const mockResponse = {
|
|
||||||
packages: {
|
|
||||||
'test-package': [
|
|
||||||
{
|
|
||||||
require: {
|
|
||||||
php: '8.0.0'
|
|
||||||
},
|
|
||||||
version: '1.0.0'
|
|
||||||
},
|
|
||||||
{
|
|
||||||
version: '2.0.0'
|
|
||||||
}
|
|
||||||
]
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
test('should return the version if matching php version is found', async () => {
|
|
||||||
nock('https://repo.packagist.org')
|
|
||||||
.get('/p2/test-package.json')
|
|
||||||
.reply(200, mockResponse);
|
|
||||||
const result = await packagist.search('test-package', '8.0');
|
|
||||||
expect(result).toBe('1.0.0');
|
|
||||||
});
|
|
||||||
|
|
||||||
test('should return null if no matching php version is found', async () => {
|
|
||||||
nock('https://repo.packagist.org')
|
|
||||||
.get('/p2/test-package.json')
|
|
||||||
.reply(200, mockResponse);
|
|
||||||
const result = await packagist.search('test-package', '5.6');
|
|
||||||
expect(result).toBeNull();
|
|
||||||
});
|
|
||||||
|
|
||||||
test('should return null if fetch fails', async () => {
|
|
||||||
nock('https://repo.packagist.org').get('/p2/test-package.json').reply(404);
|
|
||||||
const result = await packagist.search('test-package', '8.0');
|
|
||||||
expect(result).toBeNull();
|
|
||||||
});
|
|
||||||
|
|
||||||
test('should return null if the response is empty', async () => {
|
|
||||||
nock('https://repo.packagist.org')
|
|
||||||
.get('/p2/test-package.json')
|
|
||||||
.reply(200, {error: true, data: '[]'});
|
|
||||||
const result = await packagist.search('test-package', '8.0');
|
|
||||||
expect(result).toBeNull();
|
|
||||||
});
|
|
||||||
});
|
|
||||||
File diff suppressed because it is too large
Load Diff
@@ -1,80 +1,56 @@
|
|||||||
import fs from 'fs';
|
import * as fs from 'fs';
|
||||||
import * as path from 'path';
|
import * as path from 'path';
|
||||||
import * as utils from '../src/utils';
|
import * as utils from '../src/utils';
|
||||||
import * as fetchModule from '../src/fetch';
|
|
||||||
|
jest.mock('@actions/core', () => ({
|
||||||
|
getInput: jest.fn().mockImplementation(key => {
|
||||||
|
return ['setup-php'].indexOf(key) !== -1 ? key : '';
|
||||||
|
})
|
||||||
|
}));
|
||||||
|
|
||||||
|
jest.spyOn(utils, 'fetch').mockImplementation(
|
||||||
|
async (url): Promise<string> => {
|
||||||
|
return `{ "latest": "8.0", "5.x": "5.6", "url": "${url}" }`;
|
||||||
|
}
|
||||||
|
);
|
||||||
|
|
||||||
|
async function cleanup(path: string): Promise<void> {
|
||||||
|
fs.unlink(path, error => {
|
||||||
|
if (error) {
|
||||||
|
console.log(error);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
describe('Utils tests', () => {
|
describe('Utils tests', () => {
|
||||||
it('checking readEnv', async () => {
|
it('checking readEnv', async () => {
|
||||||
process.env['test'] = 'setup-php';
|
process.env['test'] = 'setup-php';
|
||||||
process.env['test-hyphen'] = 'setup-php';
|
|
||||||
expect(await utils.readEnv('test')).toBe('setup-php');
|
expect(await utils.readEnv('test')).toBe('setup-php');
|
||||||
expect(await utils.readEnv('TEST')).toBe('setup-php');
|
|
||||||
expect(await utils.readEnv('test_hyphen')).toBe('setup-php');
|
|
||||||
expect(await utils.readEnv('TEST_HYPHEN')).toBe('setup-php');
|
|
||||||
expect(await utils.readEnv('undefined')).toBe('');
|
expect(await utils.readEnv('undefined')).toBe('');
|
||||||
});
|
});
|
||||||
|
|
||||||
it('checking getInput', async () => {
|
it('checking getInput', async () => {
|
||||||
process.env['test'] = 'setup-php';
|
process.env['test'] = 'setup-php';
|
||||||
process.env['INPUT_SETUP-PHP'] = 'setup-php';
|
|
||||||
expect(await utils.getInput('test', false)).toBe('setup-php');
|
expect(await utils.getInput('test', false)).toBe('setup-php');
|
||||||
expect(await utils.getInput('setup-php', false)).toBe('setup-php');
|
expect(await utils.getInput('setup-php', false)).toBe('setup-php');
|
||||||
expect(await utils.getInput('DoesNotExist', false)).toBe('');
|
expect(await utils.getInput('DoesNotExist', false)).toBe('');
|
||||||
await expect(async () => {
|
expect(async () => {
|
||||||
await utils.getInput('DoesNotExist', true);
|
await utils.getInput('DoesNotExist', true);
|
||||||
}).rejects.toThrow('Input required and not supplied: DoesNotExist');
|
}).rejects.toThrow('Input required and not supplied: DoesNotExist');
|
||||||
delete process.env['INPUT_SETUP-PHP'];
|
|
||||||
});
|
});
|
||||||
|
|
||||||
it('checking getManifestURL', async () => {
|
it('checking fetch', async () => {
|
||||||
for (const url of await utils.getManifestURLS()) {
|
expect(await utils.fetch('test_url')).toBe(
|
||||||
expect(url).toContain('php-versions.json');
|
'{ "latest": "8.0", "5.x": "5.6", "url": "test_url" }'
|
||||||
}
|
);
|
||||||
});
|
});
|
||||||
|
|
||||||
it('checking parseVersion', async () => {
|
it('checking parseVersion', async () => {
|
||||||
const fetchSpy = jest
|
expect(await utils.parseVersion('latest')).toBe('8.0');
|
||||||
.spyOn(fetchModule, 'fetch')
|
|
||||||
.mockResolvedValue({data: '{ "latest": "8.1", "5.x": "5.6" }'});
|
|
||||||
expect(await utils.parseVersion('latest')).toBe('8.1');
|
|
||||||
expect(await utils.parseVersion('7')).toBe('7.0');
|
expect(await utils.parseVersion('7')).toBe('7.0');
|
||||||
expect(await utils.parseVersion('7.4')).toBe('7.4');
|
expect(await utils.parseVersion('7.4')).toBe('7.4');
|
||||||
expect(await utils.parseVersion('5.x')).toBe('5.6');
|
expect(await utils.parseVersion('5.x')).toBe('5.6');
|
||||||
expect(await utils.parseVersion('pre')).toBe('pre');
|
expect(await utils.parseVersion('4.x')).toBe(undefined);
|
||||||
expect(await utils.parseVersion('pre-installed')).toBe('pre');
|
|
||||||
await expect(utils.parseVersion('4.x')).rejects.toThrow(
|
|
||||||
'Invalid PHP version: 4.x'
|
|
||||||
);
|
|
||||||
await expect(utils.parseVersion('foo')).rejects.toThrow(
|
|
||||||
'Invalid PHP version:'
|
|
||||||
);
|
|
||||||
|
|
||||||
fetchSpy.mockResolvedValue({data: '{ "latest": "8.1.0" }'});
|
|
||||||
await expect(utils.parseVersion('latest')).rejects.toThrow(
|
|
||||||
'Invalid PHP version in manifest:'
|
|
||||||
);
|
|
||||||
|
|
||||||
fetchSpy.mockReset();
|
|
||||||
fetchSpy.mockResolvedValueOnce({}).mockResolvedValueOnce({});
|
|
||||||
await expect(utils.parseVersion('latest')).rejects.toThrow(
|
|
||||||
'Could not fetch the PHP version manifest.'
|
|
||||||
);
|
|
||||||
expect(fetchSpy).toHaveBeenCalledTimes(2);
|
|
||||||
});
|
|
||||||
|
|
||||||
it('checking parseIniFile', async () => {
|
|
||||||
expect(await utils.parseIniFile('production')).toBe('production');
|
|
||||||
expect(await utils.parseIniFile('development')).toBe('development');
|
|
||||||
expect(await utils.parseIniFile('none')).toBe('none');
|
|
||||||
expect(await utils.parseIniFile('php.ini-production')).toBe('production');
|
|
||||||
expect(await utils.parseIniFile('php.ini-development')).toBe('development');
|
|
||||||
expect(await utils.parseIniFile('/etc/php.ini-production')).toBe(
|
|
||||||
'production'
|
|
||||||
);
|
|
||||||
expect(await utils.parseIniFile('/a-b/php.ini-development')).toBe(
|
|
||||||
'development'
|
|
||||||
);
|
|
||||||
expect(await utils.parseIniFile('invalid')).toBe('production');
|
|
||||||
});
|
});
|
||||||
|
|
||||||
it('checking asyncForEach', async () => {
|
it('checking asyncForEach', async () => {
|
||||||
@@ -96,33 +72,51 @@ describe('Utils tests', () => {
|
|||||||
expect(await utils.color('warning')).toBe('33');
|
expect(await utils.color('warning')).toBe('33');
|
||||||
});
|
});
|
||||||
|
|
||||||
it('checking extensionArray', async () => {
|
it('checking readScripts', async () => {
|
||||||
expect(
|
const darwin: string = fs.readFileSync(
|
||||||
await utils.extensionArray('a, :b, php_c, none, php-d, Zend e, :Zend f')
|
path.join(__dirname, '../src/scripts/darwin.sh'),
|
||||||
).toEqual(['none', 'a', ':b', 'c', 'd', 'e', ':f']);
|
'utf8'
|
||||||
|
);
|
||||||
expect(await utils.extensionArray('')).toEqual([]);
|
const linux: string = fs.readFileSync(
|
||||||
expect(await utils.extensionArray(' ')).toEqual([]);
|
path.join(__dirname, '../src/scripts/linux.sh'),
|
||||||
|
'utf8'
|
||||||
expect(
|
);
|
||||||
await utils.extensionArray('apcu, mbstring, \\ pdo_pgsql, posix, session')
|
const win32: string = fs.readFileSync(
|
||||||
).toEqual(['apcu', 'mbstring', 'pdo_pgsql', 'posix', 'session']);
|
path.join(__dirname, '../src/scripts/win32.ps1'),
|
||||||
|
'utf8'
|
||||||
|
);
|
||||||
|
expect(await utils.readScript('darwin.sh')).toBe(darwin);
|
||||||
|
expect(await utils.readScript('darwin.sh')).toBe(darwin);
|
||||||
|
expect(await utils.readScript('linux.sh')).toBe(linux);
|
||||||
|
expect(await utils.readScript('linux.sh')).toBe(linux);
|
||||||
|
expect(await utils.readScript('win32.ps1')).toBe(win32);
|
||||||
|
expect(await utils.readScript('win32.ps1')).toBe(win32);
|
||||||
});
|
});
|
||||||
|
|
||||||
it('checking shell helpers', () => {
|
it('checking writeScripts', async () => {
|
||||||
expect(utils.escapeForShell('a$b`c\\d"e', 'linux')).toBe(
|
const testString = 'sudo apt-get install php';
|
||||||
'a\\$b\\`c\\\\d\\"e'
|
const runner_dir: string = process.env['RUNNER_TOOL_CACHE'] || '';
|
||||||
);
|
const script_path: string = path.join(runner_dir, 'test.sh');
|
||||||
expect(utils.escapeForShell('a$b`c"d', 'win32')).toBe('a`$b``c`"d');
|
await utils.writeScript('test.sh', testString);
|
||||||
expect(utils.safeArg('vendor-pkg/repo@v1.0.0', 'linux')).toBe(
|
await fs.readFile(
|
||||||
'vendor-pkg/repo@v1.0.0'
|
script_path,
|
||||||
);
|
function (error: Error | null, data: Buffer) {
|
||||||
expect(utils.safeArg('phpcs:>=3.0', 'linux')).toBe('"phpcs:>=3.0"');
|
expect(testString).toBe(data.toString());
|
||||||
expect(utils.safeArg('foo$bar', 'win32')).toBe('"foo`$bar"');
|
}
|
||||||
expect(utils.sanitizeShellInput('foo;$(`ls`)bar')).toBe('foolsbar');
|
|
||||||
expect(utils.sanitizeShellInput('vendor/foo:1.*', true)).toBe(
|
|
||||||
'vendor/foo:1.'
|
|
||||||
);
|
);
|
||||||
|
await cleanup(script_path);
|
||||||
|
});
|
||||||
|
|
||||||
|
it('checking extensionArray', async () => {
|
||||||
|
expect(await utils.extensionArray('a, b, php_c, php-d')).toEqual([
|
||||||
|
'a',
|
||||||
|
'b',
|
||||||
|
'c',
|
||||||
|
'd'
|
||||||
|
]);
|
||||||
|
|
||||||
|
expect(await utils.extensionArray('')).toEqual([]);
|
||||||
|
expect(await utils.extensionArray(' ')).toEqual([]);
|
||||||
});
|
});
|
||||||
|
|
||||||
it('checking INIArray', async () => {
|
it('checking INIArray', async () => {
|
||||||
@@ -145,9 +139,6 @@ describe('Utils tests', () => {
|
|||||||
expect(
|
expect(
|
||||||
await utils.CSVArray('a=E_ALL, b=E_ALL & ~ E_ALL, c="E_ALL", d=\'E_ALL\'')
|
await utils.CSVArray('a=E_ALL, b=E_ALL & ~ E_ALL, c="E_ALL", d=\'E_ALL\'')
|
||||||
).toEqual(['a=E_ALL', 'b=E_ALL & ~ E_ALL', 'c=E_ALL', 'd=E_ALL']);
|
).toEqual(['a=E_ALL', 'b=E_ALL & ~ E_ALL', 'c=E_ALL', 'd=E_ALL']);
|
||||||
expect(
|
|
||||||
await utils.CSVArray('a="b=c;d=e", b=\'c=d,e\', c="g=h,i=j", d=g=h, a===')
|
|
||||||
).toEqual(["a='b=c;d=e'", "b='c=d,e'", "c='g=h,i=j'", "d='g=h'", "a='=='"]);
|
|
||||||
expect(await utils.CSVArray('')).toEqual([]);
|
expect(await utils.CSVArray('')).toEqual([]);
|
||||||
expect(await utils.CSVArray(' ')).toEqual([]);
|
expect(await utils.CSVArray(' ')).toEqual([]);
|
||||||
});
|
});
|
||||||
@@ -229,7 +220,6 @@ describe('Utils tests', () => {
|
|||||||
expect(await utils.getCommand('linux', 'tool')).toBe('add_tool ');
|
expect(await utils.getCommand('linux', 'tool')).toBe('add_tool ');
|
||||||
expect(await utils.getCommand('darwin', 'tool')).toBe('add_tool ');
|
expect(await utils.getCommand('darwin', 'tool')).toBe('add_tool ');
|
||||||
expect(await utils.getCommand('win32', 'tool')).toBe('Add-Tool ');
|
expect(await utils.getCommand('win32', 'tool')).toBe('Add-Tool ');
|
||||||
expect(await utils.getCommand('win32', 'tool_name')).toBe('Add-ToolName ');
|
|
||||||
expect(await utils.getCommand('openbsd', 'tool')).toContain(
|
expect(await utils.getCommand('openbsd', 'tool')).toContain(
|
||||||
'Platform openbsd is not supported'
|
'Platform openbsd is not supported'
|
||||||
);
|
);
|
||||||
@@ -269,123 +259,4 @@ describe('Utils tests', () => {
|
|||||||
await utils.customPackage('pkg8', 'ext', '1.2.3', 'linux')
|
await utils.customPackage('pkg8', 'ext', '1.2.3', 'linux')
|
||||||
).toContain(script_path + '\nadd_pkg 1.2.3');
|
).toContain(script_path + '\nadd_pkg 1.2.3');
|
||||||
});
|
});
|
||||||
|
|
||||||
it('checking parseExtensionSource', async () => {
|
|
||||||
expect(
|
|
||||||
await utils.parseExtensionSource(
|
|
||||||
'ext-org-name/repo-name@release',
|
|
||||||
'extension'
|
|
||||||
)
|
|
||||||
).toContain(
|
|
||||||
'\nadd_extension_from_source ext https://github.com org-name repo-name release extension'
|
|
||||||
);
|
|
||||||
expect(
|
|
||||||
await utils.parseExtensionSource(
|
|
||||||
'ext-https://sub.domain.tld/org/repo@release',
|
|
||||||
'extension'
|
|
||||||
)
|
|
||||||
).toContain(
|
|
||||||
'\nadd_extension_from_source ext https://sub.domain.tld org repo release extension'
|
|
||||||
);
|
|
||||||
expect(
|
|
||||||
await utils.parseExtensionSource(
|
|
||||||
'ext-https://sub.domain.XN--tld/org/repo@release',
|
|
||||||
'extension'
|
|
||||||
)
|
|
||||||
).toContain(
|
|
||||||
'\nadd_extension_from_source ext https://sub.domain.XN--tld org repo release extension'
|
|
||||||
);
|
|
||||||
});
|
|
||||||
|
|
||||||
it('checking readPHPVersion', async () => {
|
|
||||||
expect(await utils.readPHPVersion()).toBe('latest');
|
|
||||||
|
|
||||||
process.env['php-version-file'] = '.phpenv-version';
|
|
||||||
await expect(utils.readPHPVersion()).rejects.toThrow(
|
|
||||||
"Could not find '.phpenv-version' file."
|
|
||||||
);
|
|
||||||
|
|
||||||
const existsSync = jest.spyOn(fs, 'existsSync').mockImplementation();
|
|
||||||
const readFileSync = jest.spyOn(fs, 'readFileSync').mockImplementation();
|
|
||||||
|
|
||||||
existsSync.mockReturnValue(true);
|
|
||||||
readFileSync.mockReturnValue('8.1');
|
|
||||||
|
|
||||||
expect(await utils.readPHPVersion()).toBe('8.1');
|
|
||||||
|
|
||||||
process.env['php-version'] = '8.2';
|
|
||||||
expect(await utils.readPHPVersion()).toBe('8.2');
|
|
||||||
|
|
||||||
process.env['php-version'] = 'pre-installed';
|
|
||||||
expect(await utils.readPHPVersion()).toBe('pre-installed');
|
|
||||||
|
|
||||||
delete process.env['php-version-file'];
|
|
||||||
delete process.env['php-version'];
|
|
||||||
|
|
||||||
existsSync.mockReturnValue(true);
|
|
||||||
readFileSync.mockReturnValue('ruby 1.2.3\nphp 8.4.2\nnode 20.1.2');
|
|
||||||
expect(await utils.readPHPVersion()).toBe('8.4.2');
|
|
||||||
|
|
||||||
existsSync.mockReturnValue(true);
|
|
||||||
readFileSync.mockReturnValue('setup-php');
|
|
||||||
await expect(utils.readPHPVersion()).rejects.toThrow('Invalid PHP version');
|
|
||||||
|
|
||||||
existsSync.mockReturnValueOnce(false).mockReturnValueOnce(true);
|
|
||||||
readFileSync.mockReturnValue(
|
|
||||||
'{ "platform-overrides": { "php": "7.3.25" } }'
|
|
||||||
);
|
|
||||||
expect(await utils.readPHPVersion()).toBe('7.3.25');
|
|
||||||
|
|
||||||
existsSync
|
|
||||||
.mockReturnValueOnce(false)
|
|
||||||
.mockReturnValueOnce(false)
|
|
||||||
.mockReturnValueOnce(true);
|
|
||||||
readFileSync.mockReturnValue(
|
|
||||||
'{ "config": { "platform": { "php": "7.4.33" } } }'
|
|
||||||
);
|
|
||||||
expect(await utils.readPHPVersion()).toBe('7.4.33');
|
|
||||||
|
|
||||||
existsSync.mockClear();
|
|
||||||
readFileSync.mockClear();
|
|
||||||
});
|
|
||||||
|
|
||||||
it('readPHPVersion rejects unsupported values from each source', async () => {
|
|
||||||
const existsSync = jest.spyOn(fs, 'existsSync').mockImplementation();
|
|
||||||
const readFileSync = jest.spyOn(fs, 'readFileSync').mockImplementation();
|
|
||||||
|
|
||||||
process.env['php-version'] = 'bogus';
|
|
||||||
await expect(utils.readPHPVersion()).rejects.toThrow('php-version input');
|
|
||||||
delete process.env['php-version'];
|
|
||||||
|
|
||||||
existsSync.mockReturnValue(true);
|
|
||||||
readFileSync.mockReturnValue('bogus');
|
|
||||||
await expect(utils.readPHPVersion()).rejects.toThrow('.php-version');
|
|
||||||
|
|
||||||
existsSync.mockReturnValueOnce(false).mockReturnValueOnce(true);
|
|
||||||
readFileSync.mockReturnValue('{"platform-overrides":{"php":"bogus"}}');
|
|
||||||
await expect(utils.readPHPVersion()).rejects.toThrow(
|
|
||||||
'composer.lock platform-overrides.php'
|
|
||||||
);
|
|
||||||
|
|
||||||
existsSync
|
|
||||||
.mockReturnValueOnce(false)
|
|
||||||
.mockReturnValueOnce(false)
|
|
||||||
.mockReturnValueOnce(true);
|
|
||||||
readFileSync.mockReturnValue('{"config":{"platform":{"php":"bogus"}}}');
|
|
||||||
await expect(utils.readPHPVersion()).rejects.toThrow(
|
|
||||||
'composer.json config.platform.php'
|
|
||||||
);
|
|
||||||
|
|
||||||
existsSync.mockClear();
|
|
||||||
readFileSync.mockClear();
|
|
||||||
});
|
|
||||||
|
|
||||||
it('checking setVariable', async () => {
|
|
||||||
let script: string = await utils.setVariable('var', 'command', 'linux');
|
|
||||||
expect(script).toEqual('\nvar="$(command)"\n');
|
|
||||||
script = await utils.setVariable('var', 'command', 'darwin');
|
|
||||||
expect(script).toEqual('\nvar="$(command)"\n');
|
|
||||||
script = await utils.setVariable('var', 'command', 'win32');
|
|
||||||
expect(script).toEqual('\n$var = command\n');
|
|
||||||
});
|
|
||||||
});
|
});
|
||||||
|
|||||||
18
action.yml
18
action.yml
@@ -7,17 +7,11 @@ branding:
|
|||||||
inputs:
|
inputs:
|
||||||
php-version:
|
php-version:
|
||||||
description: 'Setup PHP version.'
|
description: 'Setup PHP version.'
|
||||||
required: false
|
default: '8.0'
|
||||||
php-version-file:
|
required: true
|
||||||
description: 'Setup PHP version from a file.'
|
|
||||||
required: false
|
|
||||||
extensions:
|
extensions:
|
||||||
description: 'Setup PHP extensions.'
|
description: 'Setup PHP extensions.'
|
||||||
required: false
|
required: false
|
||||||
ini-file:
|
|
||||||
description: 'Set base ini file.'
|
|
||||||
required: false
|
|
||||||
default: 'production'
|
|
||||||
ini-values:
|
ini-values:
|
||||||
description: 'Add values to php.ini.'
|
description: 'Add values to php.ini.'
|
||||||
required: false
|
required: false
|
||||||
@@ -27,12 +21,6 @@ inputs:
|
|||||||
tools:
|
tools:
|
||||||
description: 'Setup popular tools globally.'
|
description: 'Setup popular tools globally.'
|
||||||
required: false
|
required: false
|
||||||
github-token:
|
|
||||||
description: 'GitHub token to use for authentication.'
|
|
||||||
default: ${{ github.token }}
|
|
||||||
outputs:
|
|
||||||
php-version:
|
|
||||||
description: 'PHP version in semver format'
|
|
||||||
runs:
|
runs:
|
||||||
using: 'node24'
|
using: 'node12'
|
||||||
main: 'dist/index.js'
|
main: 'dist/index.js'
|
||||||
|
|||||||
3189
dist/index.js
vendored
3189
dist/index.js
vendored
File diff suppressed because one or more lines are too long
@@ -1,49 +0,0 @@
|
|||||||
import typescriptEslint from '@typescript-eslint/eslint-plugin';
|
|
||||||
import {importX} from 'eslint-plugin-import-x';
|
|
||||||
import jest from 'eslint-plugin-jest';
|
|
||||||
import prettierRecommended from 'eslint-plugin-prettier/recommended';
|
|
||||||
import eslintConfigPrettier from 'eslint-config-prettier';
|
|
||||||
import globals from 'globals';
|
|
||||||
import tsParser from '@typescript-eslint/parser';
|
|
||||||
import js from '@eslint/js';
|
|
||||||
|
|
||||||
export default [
|
|
||||||
js.configs.recommended,
|
|
||||||
...typescriptEslint.configs['flat/recommended'],
|
|
||||||
importX.flatConfigs.errors,
|
|
||||||
importX.flatConfigs.warnings,
|
|
||||||
importX.flatConfigs.typescript,
|
|
||||||
prettierRecommended,
|
|
||||||
eslintConfigPrettier,
|
|
||||||
{
|
|
||||||
plugins: {
|
|
||||||
jest
|
|
||||||
},
|
|
||||||
|
|
||||||
languageOptions: {
|
|
||||||
globals: {
|
|
||||||
...globals.node,
|
|
||||||
...globals.jest
|
|
||||||
},
|
|
||||||
|
|
||||||
parser: tsParser,
|
|
||||||
ecmaVersion: 2021,
|
|
||||||
sourceType: 'module'
|
|
||||||
},
|
|
||||||
|
|
||||||
settings: {
|
|
||||||
'import-x/resolver': {
|
|
||||||
typescript: {
|
|
||||||
alwaysTryTypes: true,
|
|
||||||
project: './tsconfig.json'
|
|
||||||
},
|
|
||||||
node: {
|
|
||||||
extensions: ['.js', '.ts']
|
|
||||||
}
|
|
||||||
},
|
|
||||||
'import-x/parsers': {
|
|
||||||
'@typescript-eslint/parser': ['.ts']
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
];
|
|
||||||
@@ -8,31 +8,25 @@ jobs:
|
|||||||
strategy:
|
strategy:
|
||||||
fail-fast: false
|
fail-fast: false
|
||||||
matrix:
|
matrix:
|
||||||
php-versions: ['8.3', '8.4', '8.5']
|
php-versions: ['7.1', '7.2', '7.3', '7.4']
|
||||||
steps:
|
steps:
|
||||||
- name: Checkout
|
- name: Checkout
|
||||||
uses: actions/checkout@v6
|
uses: actions/checkout@v2
|
||||||
|
- name: Setup PHP, with composer and extensions
|
||||||
# Docs: https://github.com/shivammathur/setup-php
|
uses: shivammathur/setup-php@v2 #https://github.com/shivammathur/setup-php
|
||||||
- name: Setup PHP
|
|
||||||
uses: shivammathur/setup-php@v2
|
|
||||||
with:
|
with:
|
||||||
php-version: ${{ matrix.php-versions }}
|
php-version: ${{ matrix.php-versions }}
|
||||||
|
|
||||||
- name: Get composer cache directory
|
- name: Get composer cache directory
|
||||||
id: composer-cache
|
id: composer-cache
|
||||||
run: echo "dir=$(composer config cache-files-dir)" >> $GITHUB_OUTPUT
|
run: echo "::set-output name=dir::$(composer config cache-files-dir)"
|
||||||
|
- uses: actions/cache@v2
|
||||||
- uses: actions/cache@v5
|
|
||||||
with:
|
with:
|
||||||
path: ${{ steps.composer-cache.outputs.dir }}
|
path: ${{ steps.composer-cache.outputs.dir }}
|
||||||
# Use composer.json for key, if composer.lock is not committed.
|
# Use composer.json for key, if composer.lock is not committed.
|
||||||
# key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.json') }}
|
# key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.json') }}
|
||||||
key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.lock') }}
|
key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.lock') }}
|
||||||
restore-keys: ${{ runner.os }}-composer-
|
restore-keys: ${{ runner.os }}-composer-
|
||||||
|
|
||||||
- name: Install Composer dependencies
|
- name: Install Composer dependencies
|
||||||
run: composer install --no-progress --prefer-dist --optimize-autoloader
|
run: composer install --no-progress --prefer-dist --optimize-autoloader
|
||||||
|
|
||||||
- name: PHP test
|
- name: PHP test
|
||||||
run: composer test
|
run: composer test
|
||||||
@@ -4,9 +4,6 @@ on: [push, pull_request]
|
|||||||
jobs:
|
jobs:
|
||||||
blackfire-player:
|
blackfire-player:
|
||||||
name: Blackfire (PHP ${{ matrix.php-versions }})
|
name: Blackfire (PHP ${{ matrix.php-versions }})
|
||||||
defaults:
|
|
||||||
run:
|
|
||||||
shell: bash
|
|
||||||
# Add your Blackfire credentials securely using GitHub Secrets
|
# Add your Blackfire credentials securely using GitHub Secrets
|
||||||
env:
|
env:
|
||||||
BLACKFIRE_SERVER_ID: ${{ secrets.BLACKFIRE_SERVER_ID }}
|
BLACKFIRE_SERVER_ID: ${{ secrets.BLACKFIRE_SERVER_ID }}
|
||||||
@@ -17,31 +14,18 @@ jobs:
|
|||||||
strategy:
|
strategy:
|
||||||
fail-fast: false
|
fail-fast: false
|
||||||
matrix:
|
matrix:
|
||||||
operating-system: [ubuntu-latest, macos-latest]
|
operating-system: [ubuntu-latest, windows-latest, macos-latest]
|
||||||
php-versions: ['8.3', '8.4', '8.5']
|
php-versions: ['7.2', '7.3', '7.4']
|
||||||
# Blackfire Player supports PHP 8.5 and is available on Ubuntu and macOS.
|
# blackfire-player supports PHP >= 5.5
|
||||||
steps:
|
steps:
|
||||||
- name: Checkout
|
- name: Checkout
|
||||||
uses: actions/checkout@v6
|
uses: actions/checkout@v2
|
||||||
|
- name: Setup PHP, with composer and extensions
|
||||||
# Docs: https://github.com/shivammathur/setup-php
|
uses: shivammathur/setup-php@v2 #https://github.com/shivammathur/setup-php
|
||||||
- name: Setup PHP
|
|
||||||
uses: shivammathur/setup-php@v2
|
|
||||||
with:
|
with:
|
||||||
php-version: ${{ matrix.php-versions }}
|
php-version: ${{ matrix.php-versions }}
|
||||||
extensions: blackfire
|
extensions: blackfire
|
||||||
# Setup Blackfire CLI and player
|
tools: blackfire, blackfire-player #Setup Blackfire client, agent and player
|
||||||
tools: blackfire, blackfire-player
|
|
||||||
coverage: none
|
coverage: none
|
||||||
|
|
||||||
- name: Start local endpoint
|
|
||||||
run: |
|
|
||||||
php -S 127.0.0.1:8080 > "$RUNNER_TEMP/blackfire-player.log" 2>&1 &
|
|
||||||
sleep 5
|
|
||||||
|
|
||||||
- name: Validate scenario
|
|
||||||
run: blackfire-player validate scenario.bkf
|
|
||||||
|
|
||||||
# Refer to https://docs.blackfire.io/builds-cookbooks/player
|
|
||||||
- name: Play the scenario
|
- name: Play the scenario
|
||||||
run: blackfire-player run scenario.bkf --endpoint=http://127.0.0.1:8080
|
run: blackfire-player run scenario.bkf # Refer to https://blackfire.io/docs/player/index#usage
|
||||||
|
|||||||
@@ -15,35 +15,17 @@ jobs:
|
|||||||
fail-fast: false
|
fail-fast: false
|
||||||
matrix:
|
matrix:
|
||||||
operating-system: [ubuntu-latest, windows-latest, macos-latest]
|
operating-system: [ubuntu-latest, windows-latest, macos-latest]
|
||||||
php-versions: ['8.3', '8.4', '8.5']
|
php-versions: ['7.2', '7.3', '7.4']
|
||||||
# Blackfire supports the current PHP releases on Ubuntu, macOS, and Windows.
|
# Blackfire supports PHP >= 5.3 on ubuntu and macos and PHP >= 5.4 on windows
|
||||||
steps:
|
steps:
|
||||||
- name: Checkout
|
- name: Checkout
|
||||||
uses: actions/checkout@v6
|
uses: actions/checkout@v2
|
||||||
|
- name: Setup PHP, with composer and extensions
|
||||||
# Docs: https://github.com/shivammathur/setup-php
|
uses: shivammathur/setup-php@v2 #https://github.com/shivammathur/setup-php
|
||||||
- name: Setup PHP
|
|
||||||
uses: shivammathur/setup-php@v2
|
|
||||||
with:
|
with:
|
||||||
php-version: ${{ matrix.php-versions }}
|
php-version: ${{ matrix.php-versions }}
|
||||||
# Setup Blackfire extension and CLI.
|
extensions: blackfire
|
||||||
extensions: blackfire, :xdebug
|
tools: blackfire #Setup Blackfire client and agent
|
||||||
tools: blackfire
|
|
||||||
# Disable Xdebug and PCOV coverage drivers
|
|
||||||
coverage: none
|
coverage: none
|
||||||
|
|
||||||
# Refer to https://blackfire.io/docs/cookbooks/profiling-cli
|
|
||||||
- name: Profile
|
- name: Profile
|
||||||
shell: bash
|
run: blackfire run php my-script.php # Refer to https://blackfire.io/docs/cookbooks/profiling-cli
|
||||||
run: |
|
|
||||||
set +e
|
|
||||||
output=$(blackfire run php my-script.php 2>&1)
|
|
||||||
exit_code=$?
|
|
||||||
printf '%s\n' "$output"
|
|
||||||
if [ "$exit_code" -ne 0 ]; then
|
|
||||||
if printf '%s' "$output" | grep -q "upgrade your subscription"; then
|
|
||||||
echo "Blackfire profiling reached the repository quota limit; treating this as a known non-fatal condition."
|
|
||||||
exit 0
|
|
||||||
fi
|
|
||||||
exit "$exit_code"
|
|
||||||
fi
|
|
||||||
|
|||||||
@@ -6,14 +6,11 @@ jobs:
|
|||||||
tests:
|
tests:
|
||||||
strategy:
|
strategy:
|
||||||
matrix:
|
matrix:
|
||||||
php-versions: ['8.4', '8.5']
|
php-versions: ['7.2', '7.3', '7.4']
|
||||||
# The latest cakephp/app release resolves dev dependencies that require PHP 8.4+.
|
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
|
|
||||||
# Docs: https://docs.github.com/en/actions/using-containerized-services
|
|
||||||
services:
|
services:
|
||||||
mysql:
|
mysql:
|
||||||
image: mysql:latest
|
image: mysql:5.7
|
||||||
env:
|
env:
|
||||||
MYSQL_ALLOW_EMPTY_PASSWORD: false
|
MYSQL_ALLOW_EMPTY_PASSWORD: false
|
||||||
MYSQL_ROOT_PASSWORD: password
|
MYSQL_ROOT_PASSWORD: password
|
||||||
@@ -21,7 +18,6 @@ jobs:
|
|||||||
ports:
|
ports:
|
||||||
- 3306/tcp
|
- 3306/tcp
|
||||||
options: --health-cmd="mysqladmin ping" --health-interval=10s --health-timeout=5s --health-retries=3
|
options: --health-cmd="mysqladmin ping" --health-interval=10s --health-timeout=5s --health-retries=3
|
||||||
|
|
||||||
redis:
|
redis:
|
||||||
image: redis
|
image: redis
|
||||||
ports:
|
ports:
|
||||||
@@ -29,79 +25,63 @@ jobs:
|
|||||||
options: --health-cmd="redis-cli ping" --health-interval=10s --health-timeout=5s --health-retries=3
|
options: --health-cmd="redis-cli ping" --health-interval=10s --health-timeout=5s --health-retries=3
|
||||||
steps:
|
steps:
|
||||||
- name: Checkout
|
- name: Checkout
|
||||||
uses: actions/checkout@v6
|
uses: actions/checkout@v2
|
||||||
|
|
||||||
# Docs: https://github.com/shivammathur/setup-php
|
|
||||||
- name: Setup PHP
|
- name: Setup PHP
|
||||||
uses: shivammathur/setup-php@v2
|
uses: shivammathur/setup-php@v2
|
||||||
with:
|
with:
|
||||||
php-version: ${{ matrix.php-versions }}
|
php-version: ${{ matrix.php-versions }}
|
||||||
# You can also use ext-apcu or ext-memcached instead of ext-redis
|
# You can also use ext-apcu or ext-memcached instead of ext-redis
|
||||||
# Install memcached if using ext-memcached
|
# Install memcached if using ext-memcached
|
||||||
extensions: mbstring, intl, redis, apcu, pdo_mysql
|
extensions: mbstring, intl, redis, pdo_mysql
|
||||||
coverage: pcov
|
coverage: pcov
|
||||||
|
- name: Start mysql service
|
||||||
# Local MySQL service in GitHub hosted environments is disabled by default.
|
run: sudo /etc/init.d/mysql start
|
||||||
# If you are using it instead of service containers, make sure you start it.
|
|
||||||
# - name: Start mysql service
|
|
||||||
# run: sudo systemctl start mysql.service
|
|
||||||
|
|
||||||
- name: Get composer cache directory
|
- name: Get composer cache directory
|
||||||
id: composer-cache
|
id: composer-cache
|
||||||
run: echo "dir=$(composer config cache-files-dir)" >> $GITHUB_OUTPUT
|
run: echo "::set-output name=dir::$(composer config cache-files-dir)"
|
||||||
|
|
||||||
- name: Cache composer dependencies
|
- name: Cache composer dependencies
|
||||||
uses: actions/cache@v5
|
uses: actions/cache@v2
|
||||||
with:
|
with:
|
||||||
path: ${{ steps.composer-cache.outputs.dir }}
|
path: ${{ steps.composer-cache.outputs.dir }}
|
||||||
# Use composer.json for key, if composer.lock is not committed.
|
# Use composer.json for key, if composer.lock is not committed.
|
||||||
# key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.json') }}
|
# key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.json') }}
|
||||||
key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.lock') }}
|
key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.lock') }}
|
||||||
restore-keys: ${{ runner.os }}-composer-
|
restore-keys: ${{ runner.os }}-composer-
|
||||||
|
|
||||||
- name: Install dependencies
|
- name: Install dependencies
|
||||||
run: |
|
run: |
|
||||||
composer install --no-progress --prefer-dist --optimize-autoloader
|
composer install --no-progress --prefer-dist --optimize-autoloader
|
||||||
composer run-script post-install-cmd --no-interaction
|
composer run-script post-install-cmd --no-interaction
|
||||||
|
|
||||||
# Add a step to run migrations if required
|
# Add a step to run migrations if required
|
||||||
- name: Test with phpunit
|
- name: Test with phpunit
|
||||||
run: vendor/bin/phpunit --coverage-text
|
run: vendor/bin/phpunit --coverage-text
|
||||||
env:
|
env:
|
||||||
REDIS_PORT: ${{ job.services.redis.ports['6379'] }}
|
REDIS_PORT: ${{ job.services.redis.ports['6379'] }}
|
||||||
DATABASE_URL: "mysql://root:password@127.0.0.1:${{ job.services.mysql.ports['3306'] }}/cakephp?init[]=SET sql_mode = \"STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION\""
|
DB_DSN: "mysql://root:password@127.0.0.1:${{ job.services.mysql.ports['3306'] }}/cakephp?init[]=SET sql_mode = \"STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION\""
|
||||||
DATABASE_TEST_URL: "mysql://root:password@127.0.0.1:${{ job.services.mysql.ports['3306'] }}/cakephp?init[]=SET sql_mode = \"STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION\""
|
|
||||||
|
|
||||||
coding-standard:
|
coding-standard:
|
||||||
name: Coding Standard
|
name: Coding Standard
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
steps:
|
steps:
|
||||||
- name: Checkout
|
- name: Checkout
|
||||||
uses: actions/checkout@v6
|
uses: actions/checkout@v2
|
||||||
|
|
||||||
# Docs: https://github.com/shivammathur/setup-php
|
|
||||||
- name: Setup PHP
|
- name: Setup PHP
|
||||||
uses: shivammathur/setup-php@v2
|
uses: shivammathur/setup-php@v2
|
||||||
with:
|
with:
|
||||||
php-version: '8.5'
|
php-version: '7.3'
|
||||||
extensions: mbstring, intl
|
extensions: mbstring, intl
|
||||||
|
|
||||||
- name: Get composer cache directory
|
- name: Get composer cache directory
|
||||||
id: composer-cache
|
id: composer-cache
|
||||||
run: echo "dir=$(composer config cache-files-dir)" >> $GITHUB_OUTPUT
|
run: echo "::set-output name=dir::$(composer config cache-files-dir)"
|
||||||
|
|
||||||
- name: Cache composer dependencies
|
- name: Cache composer dependencies
|
||||||
uses: actions/cache@v5
|
uses: actions/cache@v2
|
||||||
with:
|
with:
|
||||||
path: ${{ steps.composer-cache.outputs.dir }}
|
path: ${{ steps.composer-cache.outputs.dir }}
|
||||||
# Use composer.json for key, if composer.lock is not committed.
|
# Use composer.json for key, if composer.lock is not committed.
|
||||||
# key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.json') }}
|
# key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.json') }}
|
||||||
key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.lock') }}
|
key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.lock') }}
|
||||||
restore-keys: ${{ runner.os }}-composer-
|
restore-keys: ${{ runner.os }}-composer-
|
||||||
|
|
||||||
- name: Install dependencies
|
- name: Install dependencies
|
||||||
run: composer install --no-progress --prefer-dist --optimize-autoloader
|
run: composer install --no-progress --prefer-dist --optimize-autoloader
|
||||||
|
|
||||||
- name: PHP CodeSniffer
|
- name: PHP CodeSniffer
|
||||||
run: composer cs-check
|
run: composer cs-check
|
||||||
|
|
||||||
@@ -110,33 +90,25 @@ jobs:
|
|||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
steps:
|
steps:
|
||||||
- name: Checkout
|
- name: Checkout
|
||||||
uses: actions/checkout@v6
|
uses: actions/checkout@v2
|
||||||
|
|
||||||
# Docs: https://github.com/shivammathur/setup-php
|
|
||||||
- name: Setup PHP
|
- name: Setup PHP
|
||||||
uses: shivammathur/setup-php@v2
|
uses: shivammathur/setup-php@v2
|
||||||
with:
|
with:
|
||||||
php-version: '8.5'
|
php-version: '7.3'
|
||||||
extensions: mbstring, intl
|
extensions: mbstring, intl
|
||||||
tools: phpstan
|
tools: phpstan
|
||||||
|
|
||||||
- name: Get composer cache directory
|
- name: Get composer cache directory
|
||||||
id: composer-cache
|
id: composer-cache
|
||||||
run: echo "dir=$(composer config cache-files-dir)" >> $GITHUB_OUTPUT
|
run: echo "::set-output name=dir::$(composer config cache-files-dir)"
|
||||||
|
|
||||||
- name: Cache composer dependencies
|
- name: Cache composer dependencies
|
||||||
uses: actions/cache@v5
|
uses: actions/cache@v2
|
||||||
with:
|
with:
|
||||||
path: ${{ steps.composer-cache.outputs.dir }}
|
path: ${{ steps.composer-cache.outputs.dir }}
|
||||||
# Use composer.json for key, if composer.lock is not committed.
|
# Use composer.json for key, if composer.lock is not committed.
|
||||||
# key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.json') }}
|
# key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.json') }}
|
||||||
key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.lock') }}
|
key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.lock') }}
|
||||||
restore-keys: ${{ runner.os }}-composer-
|
restore-keys: ${{ runner.os }}-composer-
|
||||||
|
|
||||||
- name: Install dependencies
|
- name: Install dependencies
|
||||||
run: |
|
run: composer install --no-progress --prefer-dist --optimize-autoloader
|
||||||
composer install --no-progress --prefer-dist --optimize-autoloader
|
|
||||||
composer run-script post-install-cmd --no-interaction
|
|
||||||
|
|
||||||
- name: Static Analysis using PHPStan
|
- name: Static Analysis using PHPStan
|
||||||
run: phpstan analyse --no-progress src/
|
run: phpstan analyse --no-progress src/
|
||||||
@@ -5,16 +5,12 @@ on: [push, pull_request]
|
|||||||
jobs:
|
jobs:
|
||||||
tests:
|
tests:
|
||||||
strategy:
|
strategy:
|
||||||
fail-fast: false
|
|
||||||
matrix:
|
matrix:
|
||||||
php-versions: ['8.4', '8.5']
|
php-versions: ['7.2', '7.3', '7.4']
|
||||||
# The latest cakephp/app release resolves dev dependencies that require PHP 8.4+.
|
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
|
|
||||||
# Docs: https://docs.github.com/en/actions/using-containerized-services
|
|
||||||
services:
|
services:
|
||||||
postgres:
|
postgres:
|
||||||
image: postgres:latest
|
image: postgres:10.8
|
||||||
env:
|
env:
|
||||||
POSTGRES_USER: postgres
|
POSTGRES_USER: postgres
|
||||||
POSTGRES_PASSWORD: postgres
|
POSTGRES_PASSWORD: postgres
|
||||||
@@ -22,7 +18,6 @@ jobs:
|
|||||||
ports:
|
ports:
|
||||||
- 5432/tcp
|
- 5432/tcp
|
||||||
options: --health-cmd pg_isready --health-interval 10s --health-timeout 5s --health-retries 3
|
options: --health-cmd pg_isready --health-interval 10s --health-timeout 5s --health-retries 3
|
||||||
|
|
||||||
redis:
|
redis:
|
||||||
image: redis
|
image: redis
|
||||||
ports:
|
ports:
|
||||||
@@ -30,79 +25,61 @@ jobs:
|
|||||||
options: --health-cmd="redis-cli ping" --health-interval=10s --health-timeout=5s --health-retries=3
|
options: --health-cmd="redis-cli ping" --health-interval=10s --health-timeout=5s --health-retries=3
|
||||||
steps:
|
steps:
|
||||||
- name: Checkout
|
- name: Checkout
|
||||||
uses: actions/checkout@v6
|
uses: actions/checkout@v2
|
||||||
|
|
||||||
# Docs: https://github.com/shivammathur/setup-php
|
|
||||||
- name: Setup PHP
|
- name: Setup PHP
|
||||||
uses: shivammathur/setup-php@v2
|
uses: shivammathur/setup-php@v2
|
||||||
with:
|
with:
|
||||||
php-version: ${{ matrix.php-versions }}
|
php-version: ${{ matrix.php-versions }}
|
||||||
# You can also use ext-apcu or ext-memcached instead of ext-redis
|
# You can also use ext-apcu or ext-memcached instead of ext-redis
|
||||||
# Install memcached if using ext-memcached
|
# Install memcached if using ext-memcached
|
||||||
extensions: mbstring, intl, redis, apcu, pdo_pgsql
|
extensions: mbstring, intl, redis, pdo_pgsql
|
||||||
coverage: pcov
|
coverage: pcov
|
||||||
|
|
||||||
# Local PostgreSQL service in GitHub hosted environments is disabled by default.
|
|
||||||
# If you are using it instead of service containers, make sure you start it.
|
|
||||||
# - name: Start postgresql service
|
|
||||||
# run: sudo systemctl start postgresql.service
|
|
||||||
|
|
||||||
- name: Get composer cache directory
|
- name: Get composer cache directory
|
||||||
id: composer-cache
|
id: composer-cache
|
||||||
run: echo "dir=$(composer config cache-files-dir)" >> $GITHUB_OUTPUT
|
run: echo "::set-output name=dir::$(composer config cache-files-dir)"
|
||||||
|
|
||||||
- name: Cache composer dependencies
|
- name: Cache composer dependencies
|
||||||
uses: actions/cache@v5
|
uses: actions/cache@v2
|
||||||
with:
|
with:
|
||||||
path: ${{ steps.composer-cache.outputs.dir }}
|
path: ${{ steps.composer-cache.outputs.dir }}
|
||||||
# Use composer.json for key, if composer.lock is not committed.
|
# Use composer.json for key, if composer.lock is not committed.
|
||||||
# key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.json') }}
|
# key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.json') }}
|
||||||
key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.lock') }}
|
key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.lock') }}
|
||||||
restore-keys: ${{ runner.os }}-composer-
|
restore-keys: ${{ runner.os }}-composer-
|
||||||
|
|
||||||
- name: Install dependencies
|
- name: Install dependencies
|
||||||
run: |
|
run: |
|
||||||
composer install --no-progress --prefer-dist --optimize-autoloader
|
composer install --no-progress --prefer-dist --optimize-autoloader
|
||||||
composer run-script post-install-cmd --no-interaction
|
composer run-script post-install-cmd --no-interaction
|
||||||
|
|
||||||
# Add a step to run migrations if required
|
# Add a step to run migrations if required
|
||||||
- name: Test with phpunit
|
- name: Test with phpunit
|
||||||
run: vendor/bin/phpunit --coverage-text
|
run: vendor/bin/phpunit --coverage-text
|
||||||
env:
|
env:
|
||||||
REDIS_PORT: ${{ job.services.redis.ports['6379'] }}
|
REDIS_PORT: ${{ job.services.redis.ports['6379'] }}
|
||||||
DATABASE_URL: postgres://postgres:postgres@127.0.0.1:${{ job.services.postgres.ports['5432'] }}/postgres?encoding=UTF8
|
DB_DSN: postgres://postgres@127.0.0.1:${{ job.services.postgres.ports['5432'] }}/postgres
|
||||||
DATABASE_TEST_URL: postgres://postgres:postgres@127.0.0.1:${{ job.services.postgres.ports['5432'] }}/postgres?encoding=UTF8
|
|
||||||
|
|
||||||
coding-standard:
|
coding-standard:
|
||||||
name: Coding Standard
|
name: Coding Standard
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
steps:
|
steps:
|
||||||
- name: Checkout
|
- name: Checkout
|
||||||
uses: actions/checkout@v6
|
uses: actions/checkout@v2
|
||||||
|
|
||||||
# Docs: https://github.com/shivammathur/setup-php
|
|
||||||
- name: Setup PHP
|
- name: Setup PHP
|
||||||
uses: shivammathur/setup-php@v2
|
uses: shivammathur/setup-php@v2
|
||||||
with:
|
with:
|
||||||
php-version: '8.5'
|
php-version: '7.3'
|
||||||
extensions: mbstring, intl, apcu
|
extensions: mbstring, intl
|
||||||
|
|
||||||
- name: Get composer cache directory
|
- name: Get composer cache directory
|
||||||
id: composer-cache
|
id: composer-cache
|
||||||
run: echo "dir=$(composer config cache-files-dir)" >> $GITHUB_OUTPUT
|
run: echo "::set-output name=dir::$(composer config cache-files-dir)"
|
||||||
|
|
||||||
- name: Cache composer dependencies
|
- name: Cache composer dependencies
|
||||||
uses: actions/cache@v5
|
uses: actions/cache@v2
|
||||||
with:
|
with:
|
||||||
path: ${{ steps.composer-cache.outputs.dir }}
|
path: ${{ steps.composer-cache.outputs.dir }}
|
||||||
# Use composer.json for key, if composer.lock is not committed.
|
# Use composer.json for key, if composer.lock is not committed.
|
||||||
# key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.json') }}
|
# key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.json') }}
|
||||||
key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.lock') }}
|
key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.lock') }}
|
||||||
restore-keys: ${{ runner.os }}-composer-
|
restore-keys: ${{ runner.os }}-composer-
|
||||||
|
|
||||||
- name: Install dependencies
|
- name: Install dependencies
|
||||||
run: composer install --no-progress --prefer-dist --optimize-autoloader
|
run: composer install --no-progress --prefer-dist --optimize-autoloader
|
||||||
|
|
||||||
- name: PHP CodeSniffer
|
- name: PHP CodeSniffer
|
||||||
run: composer cs-check
|
run: composer cs-check
|
||||||
|
|
||||||
@@ -111,33 +88,25 @@ jobs:
|
|||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
steps:
|
steps:
|
||||||
- name: Checkout
|
- name: Checkout
|
||||||
uses: actions/checkout@v6
|
uses: actions/checkout@v2
|
||||||
|
|
||||||
# Docs: https://github.com/shivammathur/setup-php
|
|
||||||
- name: Setup PHP
|
- name: Setup PHP
|
||||||
uses: shivammathur/setup-php@v2
|
uses: shivammathur/setup-php@v2
|
||||||
with:
|
with:
|
||||||
php-version: '8.5'
|
php-version: '7.3'
|
||||||
extensions: mbstring, intl, apcu
|
extensions: mbstring, intl
|
||||||
tools: phpstan
|
tools: phpstan
|
||||||
|
|
||||||
- name: Get composer cache directory
|
- name: Get composer cache directory
|
||||||
id: composer-cache
|
id: composer-cache
|
||||||
run: echo "dir=$(composer config cache-files-dir)" >> $GITHUB_OUTPUT
|
run: echo "::set-output name=dir::$(composer config cache-files-dir)"
|
||||||
|
|
||||||
- name: Cache composer dependencies
|
- name: Cache composer dependencies
|
||||||
uses: actions/cache@v5
|
uses: actions/cache@v2
|
||||||
with:
|
with:
|
||||||
path: ${{ steps.composer-cache.outputs.dir }}
|
path: ${{ steps.composer-cache.outputs.dir }}
|
||||||
# Use composer.json for key, if composer.lock is not committed.
|
# Use composer.json for key, if composer.lock is not committed.
|
||||||
# key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.json') }}
|
# key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.json') }}
|
||||||
key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.lock') }}
|
key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.lock') }}
|
||||||
restore-keys: ${{ runner.os }}-composer-
|
restore-keys: ${{ runner.os }}-composer-
|
||||||
|
|
||||||
- name: Install dependencies
|
- name: Install dependencies
|
||||||
run: |
|
run: composer install --no-progress --prefer-dist --optimize-autoloader
|
||||||
composer install --no-progress --prefer-dist --optimize-autoloader
|
|
||||||
composer run-script post-install-cmd --no-interaction
|
|
||||||
|
|
||||||
- name: Static Analysis using PHPStan
|
- name: Static Analysis using PHPStan
|
||||||
run: phpstan analyse --no-progress src/
|
run: phpstan analyse --no-progress src/
|
||||||
@@ -7,40 +7,32 @@ jobs:
|
|||||||
strategy:
|
strategy:
|
||||||
matrix:
|
matrix:
|
||||||
operating-system: [ubuntu-latest, windows-latest, macos-latest]
|
operating-system: [ubuntu-latest, windows-latest, macos-latest]
|
||||||
php-versions: ['8.4', '8.5']
|
php-versions: ['7.2', '7.3', '7.4']
|
||||||
# The latest cakephp/app release resolves dev dependencies that require PHP 8.4+.
|
|
||||||
runs-on: ${{ matrix.operating-system }}
|
runs-on: ${{ matrix.operating-system }}
|
||||||
steps:
|
steps:
|
||||||
- name: Checkout
|
- name: Checkout
|
||||||
uses: actions/checkout@v6
|
uses: actions/checkout@v2
|
||||||
|
|
||||||
# Docs: https://github.com/shivammathur/setup-php
|
|
||||||
- name: Setup PHP
|
- name: Setup PHP
|
||||||
uses: shivammathur/setup-php@v2
|
uses: shivammathur/setup-php@v2 #https://github.com/shivammathur/setup-php
|
||||||
with:
|
with:
|
||||||
php-version: ${{ matrix.php-versions }}
|
php-version: ${{ matrix.php-versions }}
|
||||||
extensions: mbstring, intl, pdo_sqlite, pdo_mysql
|
extensions: mbstring, intl, pdo_sqlite, pdo_mysql
|
||||||
coverage: pcov
|
coverage: pcov #optional
|
||||||
|
|
||||||
- name: Get composer cache directory
|
- name: Get composer cache directory
|
||||||
id: composer-cache
|
id: composer-cache
|
||||||
shell: bash
|
run: echo "::set-output name=dir::$(composer config cache-files-dir)"
|
||||||
run: echo "dir=$(composer config cache-files-dir)" >> $GITHUB_OUTPUT
|
|
||||||
|
|
||||||
- name: Cache composer dependencies
|
- name: Cache composer dependencies
|
||||||
uses: actions/cache@v5
|
uses: actions/cache@v2
|
||||||
with:
|
with:
|
||||||
path: ${{ steps.composer-cache.outputs.dir }}
|
path: ${{ steps.composer-cache.outputs.dir }}
|
||||||
# Use composer.json for key, if composer.lock is not committed.
|
# Use composer.json for key, if composer.lock is not committed.
|
||||||
# key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.json') }}
|
# key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.json') }}
|
||||||
key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.lock') }}
|
key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.lock') }}
|
||||||
restore-keys: ${{ runner.os }}-composer-
|
restore-keys: ${{ runner.os }}-composer-
|
||||||
|
|
||||||
- name: Install dependencies
|
- name: Install dependencies
|
||||||
run: |
|
run: |
|
||||||
composer install --no-progress --prefer-dist --optimize-autoloader
|
composer install --no-progress --prefer-dist --optimize-autoloader
|
||||||
composer run-script post-install-cmd --no-interaction
|
composer run-script post-install-cmd --no-interaction
|
||||||
|
|
||||||
- name: Test with phpunit
|
- name: Test with phpunit
|
||||||
run: vendor/bin/phpunit --coverage-text
|
run: vendor/bin/phpunit --coverage-text
|
||||||
|
|
||||||
@@ -49,31 +41,25 @@ jobs:
|
|||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
steps:
|
steps:
|
||||||
- name: Checkout
|
- name: Checkout
|
||||||
uses: actions/checkout@v6
|
uses: actions/checkout@v2
|
||||||
|
|
||||||
# Docs: https://github.com/shivammathur/setup-php
|
|
||||||
- name: Setup PHP
|
- name: Setup PHP
|
||||||
uses: shivammathur/setup-php@v2
|
uses: shivammathur/setup-php@v2
|
||||||
with:
|
with:
|
||||||
php-version: '8.5'
|
php-version: '7.3'
|
||||||
extensions: mbstring, intl
|
extensions: mbstring, intl
|
||||||
- name: Get composer cache directory
|
- name: Get composer cache directory
|
||||||
id: composer-cache
|
id: composer-cache
|
||||||
shell: bash
|
run: echo "::set-output name=dir::$(composer config cache-files-dir)"
|
||||||
run: echo "dir=$(composer config cache-files-dir)" >> $GITHUB_OUTPUT
|
|
||||||
|
|
||||||
- name: Cache composer dependencies
|
- name: Cache composer dependencies
|
||||||
uses: actions/cache@v5
|
uses: actions/cache@v2
|
||||||
with:
|
with:
|
||||||
path: ${{ steps.composer-cache.outputs.dir }}
|
path: ${{ steps.composer-cache.outputs.dir }}
|
||||||
# Use composer.json for key, if composer.lock is not committed.
|
# Use composer.json for key, if composer.lock is not committed.
|
||||||
# key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.json') }}
|
# key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.json') }}
|
||||||
key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.lock') }}
|
key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.lock') }}
|
||||||
restore-keys: ${{ runner.os }}-composer-
|
restore-keys: ${{ runner.os }}-composer-
|
||||||
|
|
||||||
- name: Install dependencies
|
- name: Install dependencies
|
||||||
run: composer install --no-progress --prefer-dist --optimize-autoloader
|
run: composer install --no-progress --prefer-dist --optimize-autoloader
|
||||||
|
|
||||||
- name: PHP CodeSniffer
|
- name: PHP CodeSniffer
|
||||||
run: composer cs-check
|
run: composer cs-check
|
||||||
|
|
||||||
@@ -82,34 +68,25 @@ jobs:
|
|||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
steps:
|
steps:
|
||||||
- name: Checkout
|
- name: Checkout
|
||||||
uses: actions/checkout@v6
|
uses: actions/checkout@v2
|
||||||
|
|
||||||
# Docs: https://github.com/shivammathur/setup-php
|
|
||||||
- name: Setup PHP
|
- name: Setup PHP
|
||||||
uses: shivammathur/setup-php@v2
|
uses: shivammathur/setup-php@v2
|
||||||
with:
|
with:
|
||||||
php-version: '8.5'
|
php-version: '7.3'
|
||||||
extensions: mbstring, intl
|
extensions: mbstring, intl
|
||||||
tools: phpstan
|
tools: phpstan
|
||||||
|
|
||||||
- name: Get composer cache directory
|
- name: Get composer cache directory
|
||||||
id: composer-cache
|
id: composer-cache
|
||||||
shell: bash
|
run: echo "::set-output name=dir::$(composer config cache-files-dir)"
|
||||||
run: echo "dir=$(composer config cache-files-dir)" >> $GITHUB_OUTPUT
|
|
||||||
|
|
||||||
- name: Cache composer dependencies
|
- name: Cache composer dependencies
|
||||||
uses: actions/cache@v5
|
uses: actions/cache@v2
|
||||||
with:
|
with:
|
||||||
path: ${{ steps.composer-cache.outputs.dir }}
|
path: ${{ steps.composer-cache.outputs.dir }}
|
||||||
# Use composer.json for key, if composer.lock is not committed.
|
# Use composer.json for key, if composer.lock is not committed.
|
||||||
# key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.json') }}
|
# key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.json') }}
|
||||||
key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.lock') }}
|
key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.lock') }}
|
||||||
restore-keys: ${{ runner.os }}-composer-
|
restore-keys: ${{ runner.os }}-composer-
|
||||||
|
|
||||||
- name: Install dependencies
|
- name: Install dependencies
|
||||||
run: |
|
run: composer install --no-progress --prefer-dist --optimize-autoloader
|
||||||
composer install --no-progress --prefer-dist --optimize-autoloader
|
|
||||||
composer run-script post-install-cmd --no-interaction
|
|
||||||
|
|
||||||
- name: Static Analysis using PHPStan
|
- name: Static Analysis using PHPStan
|
||||||
run: phpstan analyse --no-progress src/
|
run: phpstan analyse --no-progress src/
|
||||||
|
|||||||
@@ -6,36 +6,29 @@ jobs:
|
|||||||
strategy:
|
strategy:
|
||||||
matrix:
|
matrix:
|
||||||
operating-system: [ubuntu-latest, windows-latest, macos-latest]
|
operating-system: [ubuntu-latest, windows-latest, macos-latest]
|
||||||
php-versions: ['8.3', '8.4', '8.5']
|
php-versions: ['7.2', '7.3', '7.4']
|
||||||
runs-on: ${{ matrix.operating-system }}
|
runs-on: ${{ matrix.operating-system }}
|
||||||
steps:
|
steps:
|
||||||
- name: Checkout
|
- name: Checkout
|
||||||
uses: actions/checkout@v6
|
uses: actions/checkout@v2
|
||||||
|
- name: Setup PHP, with composer and extensions
|
||||||
# Docs: https://github.com/shivammathur/setup-php
|
uses: shivammathur/setup-php@v2 #https://github.com/shivammathur/setup-php
|
||||||
- name: Setup PHP
|
|
||||||
uses: shivammathur/setup-php@v2
|
|
||||||
with:
|
with:
|
||||||
php-version: ${{ matrix.php-versions }}
|
php-version: ${{ matrix.php-versions }}
|
||||||
extensions: mbstring, intl, curl, dom, sqlite3, pdo_sqlite
|
extensions: mbstring, intl, curl, dom
|
||||||
coverage: xdebug
|
coverage: xdebug #optional
|
||||||
|
|
||||||
- name: Get composer cache directory
|
- name: Get composer cache directory
|
||||||
id: composer-cache
|
id: composer-cache
|
||||||
shell: bash
|
run: echo "::set-output name=dir::$(composer config cache-files-dir)"
|
||||||
run: echo "dir=$(composer config cache-files-dir)" >> "$GITHUB_OUTPUT"
|
|
||||||
|
|
||||||
- name: Cache composer dependencies
|
- name: Cache composer dependencies
|
||||||
uses: actions/cache@v5
|
uses: actions/cache@v2
|
||||||
with:
|
with:
|
||||||
path: ${{ steps.composer-cache.outputs.dir }}
|
path: ${{ steps.composer-cache.outputs.dir }}
|
||||||
# Use composer.json for key, if composer.lock is not committed.
|
# Use composer.json for key, if composer.lock is not committed.
|
||||||
# key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.json') }}
|
# key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.json') }}
|
||||||
key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.lock') }}
|
key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.lock') }}
|
||||||
restore-keys: ${{ runner.os }}-composer-
|
restore-keys: ${{ runner.os }}-composer-
|
||||||
|
|
||||||
- name: Install dependencies
|
- name: Install dependencies
|
||||||
run: composer install --no-progress --prefer-dist --optimize-autoloader
|
run: composer install --no-progress --prefer-dist --optimize-autoloader
|
||||||
|
|
||||||
- name: Test with phpunit
|
- name: Test with phpunit
|
||||||
run: vendor/bin/phpunit --coverage-text
|
run: vendor/bin/phpunit --coverage-text
|
||||||
@@ -1,59 +0,0 @@
|
|||||||
# GitHub Action for Drupal 11 composer-managed projects
|
|
||||||
# Requires drupal/core-dev in require-dev for vendor/bin/phpunit
|
|
||||||
name: Testing Drupal
|
|
||||||
on: [push, pull_request]
|
|
||||||
jobs:
|
|
||||||
drupal:
|
|
||||||
name: Drupal (PHP ${{ matrix.php-versions }})
|
|
||||||
runs-on: ubuntu-latest
|
|
||||||
env:
|
|
||||||
SIMPLETEST_BASE_URL: http://127.0.0.1:8080
|
|
||||||
SIMPLETEST_DB: sqlite://localhost/sites/default/files/.ht.sqlite
|
|
||||||
BROWSERTEST_OUTPUT_DIRECTORY: /tmp/browser_output
|
|
||||||
strategy:
|
|
||||||
fail-fast: false
|
|
||||||
matrix:
|
|
||||||
php-versions: ['8.3', '8.4', '8.5']
|
|
||||||
steps:
|
|
||||||
- name: Checkout
|
|
||||||
uses: actions/checkout@v6
|
|
||||||
|
|
||||||
# Docs: https://github.com/shivammathur/setup-php
|
|
||||||
- name: Setup PHP
|
|
||||||
uses: shivammathur/setup-php@v2
|
|
||||||
with:
|
|
||||||
php-version: ${{ matrix.php-versions }}
|
|
||||||
extensions: apcu, ctype, curl, dom, gd, iconv, intl, mbstring, pdo_sqlite, simplexml, xml, zip
|
|
||||||
coverage: none
|
|
||||||
|
|
||||||
- name: Get composer cache directory
|
|
||||||
id: composer-cache
|
|
||||||
run: echo "dir=$(composer config cache-files-dir)" >> $GITHUB_OUTPUT
|
|
||||||
|
|
||||||
- name: Cache composer dependencies
|
|
||||||
uses: actions/cache@v5
|
|
||||||
with:
|
|
||||||
path: ${{ steps.composer-cache.outputs.dir }}
|
|
||||||
# Use composer.json for key, if composer.lock is not committed.
|
|
||||||
# key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.json') }}
|
|
||||||
key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.lock') }}
|
|
||||||
restore-keys: ${{ runner.os }}-composer-
|
|
||||||
|
|
||||||
- name: Install Composer dependencies
|
|
||||||
run: |
|
|
||||||
if [ "${{ matrix.php-versions }}" = "8.3" ]; then
|
|
||||||
composer require --dev drupal/core-dev:11.2.10 doctrine/instantiator:^2.0.0 --no-interaction --no-update
|
|
||||||
composer update drupal/core-dev doctrine/instantiator --with-all-dependencies --no-interaction --no-progress --prefer-dist --optimize-autoloader
|
|
||||||
else
|
|
||||||
composer install --no-interaction --no-progress --prefer-dist --optimize-autoloader
|
|
||||||
fi
|
|
||||||
|
|
||||||
- name: Prepare Drupal test directories
|
|
||||||
run: mkdir -p web/sites/default/files "$BROWSERTEST_OUTPUT_DIRECTORY"
|
|
||||||
|
|
||||||
- name: Start Drupal web server
|
|
||||||
run: php -S 127.0.0.1:8080 -t web >/tmp/php-server.log 2>&1 &
|
|
||||||
|
|
||||||
- name: Test with phpunit
|
|
||||||
# Adjust the test path to match your custom modules or themes.
|
|
||||||
run: vendor/bin/phpunit -c web/core web/modules/custom
|
|
||||||
@@ -6,20 +6,16 @@ jobs:
|
|||||||
name: Laravel (PHP ${{ matrix.php-versions }})
|
name: Laravel (PHP ${{ matrix.php-versions }})
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
env:
|
env:
|
||||||
DB_CONNECTION: mysql
|
|
||||||
DB_HOST: 127.0.0.1
|
|
||||||
DB_DATABASE: laravel
|
DB_DATABASE: laravel
|
||||||
DB_USERNAME: root
|
DB_USERNAME: root
|
||||||
DB_PASSWORD: password
|
DB_PASSWORD: password
|
||||||
BROADCAST_CONNECTION: log
|
BROADCAST_DRIVER: log
|
||||||
CACHE_STORE: redis
|
CACHE_DRIVER: redis
|
||||||
QUEUE_CONNECTION: redis
|
QUEUE_CONNECTION: redis
|
||||||
SESSION_DRIVER: redis
|
SESSION_DRIVER: redis
|
||||||
|
|
||||||
# Docs: https://docs.github.com/en/actions/using-containerized-services
|
|
||||||
services:
|
services:
|
||||||
mysql:
|
mysql:
|
||||||
image: mysql:latest
|
image: mysql:5.7
|
||||||
env:
|
env:
|
||||||
MYSQL_ALLOW_EMPTY_PASSWORD: false
|
MYSQL_ALLOW_EMPTY_PASSWORD: false
|
||||||
MYSQL_ROOT_PASSWORD: password
|
MYSQL_ROOT_PASSWORD: password
|
||||||
@@ -27,7 +23,6 @@ jobs:
|
|||||||
ports:
|
ports:
|
||||||
- 3306/tcp
|
- 3306/tcp
|
||||||
options: --health-cmd="mysqladmin ping" --health-interval=10s --health-timeout=5s --health-retries=3
|
options: --health-cmd="mysqladmin ping" --health-interval=10s --health-timeout=5s --health-retries=3
|
||||||
|
|
||||||
redis:
|
redis:
|
||||||
image: redis
|
image: redis
|
||||||
ports:
|
ports:
|
||||||
@@ -36,54 +31,42 @@ jobs:
|
|||||||
strategy:
|
strategy:
|
||||||
fail-fast: false
|
fail-fast: false
|
||||||
matrix:
|
matrix:
|
||||||
php-versions: ['8.3', '8.4', '8.5']
|
php-versions: ['7.2', '7.3', '7.4']
|
||||||
steps:
|
steps:
|
||||||
- name: Checkout
|
- name: Checkout
|
||||||
uses: actions/checkout@v6
|
uses: actions/checkout@v2
|
||||||
|
- name: Setup PHP, with composer and extensions
|
||||||
# Docs: https://github.com/shivammathur/setup-php
|
uses: shivammathur/setup-php@v2 #https://github.com/shivammathur/setup-php
|
||||||
- name: Setup PHP
|
|
||||||
uses: shivammathur/setup-php@v2
|
|
||||||
with:
|
with:
|
||||||
php-version: ${{ matrix.php-versions }}
|
php-version: ${{ matrix.php-versions }}
|
||||||
extensions: mbstring, dom, fileinfo, mysql
|
extensions: mbstring, dom, fileinfo, mysql
|
||||||
coverage: xdebug
|
coverage: xdebug #optional
|
||||||
|
- name: Start mysql service
|
||||||
# Local MySQL service in GitHub hosted environments is disabled by default.
|
run: sudo /etc/init.d/mysql start
|
||||||
# If you are using it instead of service containers, make sure you start it.
|
|
||||||
# - name: Start mysql service
|
|
||||||
# run: sudo systemctl start mysql.service
|
|
||||||
|
|
||||||
- name: Get composer cache directory
|
- name: Get composer cache directory
|
||||||
id: composer-cache
|
id: composer-cache
|
||||||
run: echo "dir=$(composer config cache-files-dir)" >> $GITHUB_OUTPUT
|
run: echo "::set-output name=dir::$(composer config cache-files-dir)"
|
||||||
|
|
||||||
- name: Cache composer dependencies
|
- name: Cache composer dependencies
|
||||||
uses: actions/cache@v5
|
uses: actions/cache@v2
|
||||||
with:
|
with:
|
||||||
path: ${{ steps.composer-cache.outputs.dir }}
|
path: ${{ steps.composer-cache.outputs.dir }}
|
||||||
# Use composer.json for key, if composer.lock is not committed.
|
# Use composer.json for key, if composer.lock is not committed.
|
||||||
# key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.json') }}
|
# key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.json') }}
|
||||||
key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.lock') }}
|
key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.lock') }}
|
||||||
restore-keys: ${{ runner.os }}-composer-
|
restore-keys: ${{ runner.os }}-composer-
|
||||||
|
|
||||||
- name: Install Composer dependencies
|
- name: Install Composer dependencies
|
||||||
run: composer install --no-progress --prefer-dist --optimize-autoloader
|
run: composer install --no-progress --prefer-dist --optimize-autoloader
|
||||||
|
|
||||||
- name: Prepare the application
|
- name: Prepare the application
|
||||||
run: |
|
run: |
|
||||||
php -r "file_exists('.env') || copy('.env.example', '.env');"
|
php -r "file_exists('.env') || copy('.env.example', '.env');"
|
||||||
php artisan key:generate
|
php artisan key:generate
|
||||||
|
|
||||||
- name: Clear Config
|
- name: Clear Config
|
||||||
run: php artisan config:clear
|
run: php artisan config:clear
|
||||||
|
|
||||||
- name: Run Migration
|
- name: Run Migration
|
||||||
run: php artisan migrate -v
|
run: php artisan migrate -v
|
||||||
env:
|
env:
|
||||||
DB_PORT: ${{ job.services.mysql.ports['3306'] }}
|
DB_PORT: ${{ job.services.mysql.ports['3306'] }}
|
||||||
REDIS_PORT: ${{ job.services.redis.ports['6379'] }}
|
REDIS_PORT: ${{ job.services.redis.ports['6379'] }}
|
||||||
|
|
||||||
- name: Test with phpunit
|
- name: Test with phpunit
|
||||||
run: vendor/bin/phpunit --coverage-text
|
run: vendor/bin/phpunit --coverage-text
|
||||||
env:
|
env:
|
||||||
|
|||||||
@@ -11,15 +11,13 @@ jobs:
|
|||||||
QUEUE_CONNECTION: redis
|
QUEUE_CONNECTION: redis
|
||||||
SESSION_DRIVER: redis
|
SESSION_DRIVER: redis
|
||||||
DB_CONNECTION: pgsql
|
DB_CONNECTION: pgsql
|
||||||
DB_HOST: 127.0.0.1
|
DB_HOST: localhost
|
||||||
DB_PASSWORD: postgres
|
DB_PASSWORD: postgres
|
||||||
DB_USERNAME: postgres
|
DB_USERNAME: postgres
|
||||||
DB_DATABASE: postgres
|
DB_DATABASE: postgres
|
||||||
|
|
||||||
# Docs: https://docs.github.com/en/actions/using-containerized-services
|
|
||||||
services:
|
services:
|
||||||
postgres:
|
postgres:
|
||||||
image: postgres:latest
|
image: postgres:10.8
|
||||||
env:
|
env:
|
||||||
POSTGRES_USER: postgres
|
POSTGRES_USER: postgres
|
||||||
POSTGRES_PASSWORD: postgres
|
POSTGRES_PASSWORD: postgres
|
||||||
@@ -27,7 +25,6 @@ jobs:
|
|||||||
ports:
|
ports:
|
||||||
- 5432/tcp
|
- 5432/tcp
|
||||||
options: --health-cmd pg_isready --health-interval 10s --health-timeout 5s --health-retries 3
|
options: --health-cmd pg_isready --health-interval 10s --health-timeout 5s --health-retries 3
|
||||||
|
|
||||||
redis:
|
redis:
|
||||||
image: redis
|
image: redis
|
||||||
ports:
|
ports:
|
||||||
@@ -36,56 +33,42 @@ jobs:
|
|||||||
strategy:
|
strategy:
|
||||||
fail-fast: false
|
fail-fast: false
|
||||||
matrix:
|
matrix:
|
||||||
php-versions: ['8.3', '8.4', '8.5']
|
php-versions: ['7.2', '7.3', '7.4']
|
||||||
steps:
|
steps:
|
||||||
- name: Checkout
|
- name: Checkout
|
||||||
uses: actions/checkout@v6
|
uses: actions/checkout@v2
|
||||||
|
- name: Setup PHP, with composer and extensions
|
||||||
# Docs: https://github.com/shivammathur/setup-php
|
uses: shivammathur/setup-php@v2 #https://github.com/shivammathur/setup-php
|
||||||
- name: Setup PHP
|
|
||||||
uses: shivammathur/setup-php@v2
|
|
||||||
with:
|
with:
|
||||||
php-version: ${{ matrix.php-versions }}
|
php-version: ${{ matrix.php-versions }}
|
||||||
extensions: mbstring, dom, fileinfo, pgsql
|
extensions: mbstring, dom, fileinfo, pgsql
|
||||||
coverage: xdebug
|
coverage: xdebug #optional
|
||||||
|
|
||||||
# Local PostgreSQL service in GitHub hosted environments is disabled by default.
|
|
||||||
# If you are using it instead of service containers, make sure you start it.
|
|
||||||
# - name: Start postgresql service
|
|
||||||
# run: sudo systemctl start postgresql.service
|
|
||||||
|
|
||||||
- name: Get composer cache directory
|
- name: Get composer cache directory
|
||||||
id: composer-cache
|
id: composer-cache
|
||||||
run: echo "dir=$(composer config cache-files-dir)" >> $GITHUB_OUTPUT
|
run: echo "::set-output name=dir::$(composer config cache-files-dir)"
|
||||||
|
|
||||||
- name: Cache composer dependencies
|
- name: Cache composer dependencies
|
||||||
uses: actions/cache@v5
|
uses: actions/cache@v2
|
||||||
with:
|
with:
|
||||||
path: ${{ steps.composer-cache.outputs.dir }}
|
path: ${{ steps.composer-cache.outputs.dir }}
|
||||||
# Use composer.json for key, if composer.lock is not committed.
|
# Use composer.json for key, if composer.lock is not committed.
|
||||||
# key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.json') }}
|
# key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.json') }}
|
||||||
key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.lock') }}
|
key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.lock') }}
|
||||||
restore-keys: ${{ runner.os }}-composer-
|
restore-keys: ${{ runner.os }}-composer-
|
||||||
|
|
||||||
- name: Install Composer dependencies
|
- name: Install Composer dependencies
|
||||||
run: composer install --no-progress --prefer-dist --optimize-autoloader
|
run: composer install --no-progress --prefer-dist --optimize-autoloader
|
||||||
|
|
||||||
- name: Prepare the application
|
- name: Prepare the application
|
||||||
run: |
|
run: |
|
||||||
php -r "file_exists('.env') || copy('.env.example', '.env');"
|
php -r "file_exists('.env') || copy('.env.example', '.env');"
|
||||||
php artisan key:generate
|
php artisan key:generate
|
||||||
|
|
||||||
- name: Clear Config
|
- name: Clear Config
|
||||||
run: php artisan config:clear
|
run: php artisan config:clear
|
||||||
|
|
||||||
- name: Run Migration
|
- name: Run Migration
|
||||||
run: php artisan migrate -v
|
run: php artisan migrate -v
|
||||||
env:
|
env:
|
||||||
DB_PORT: ${{ job.services.postgres.ports['5432'] }}
|
DB_PORT: ${{ job.services.postgres.ports[5432] }}
|
||||||
REDIS_PORT: ${{ job.services.redis.ports['6379'] }}
|
REDIS_PORT: ${{ job.services.redis.ports['6379'] }}
|
||||||
|
|
||||||
- name: Test with phpunit
|
- name: Test with phpunit
|
||||||
run: vendor/bin/phpunit --coverage-text
|
run: vendor/bin/phpunit --coverage-text
|
||||||
env:
|
env:
|
||||||
DB_PORT: ${{ job.services.postgres.ports['5432'] }}
|
DB_PORT: ${{ job.services.postgres.ports[5432] }}
|
||||||
REDIS_PORT: ${{ job.services.redis.ports['6379'] }}
|
REDIS_PORT: ${{ job.services.redis.ports['6379'] }}
|
||||||
@@ -9,43 +9,34 @@ jobs:
|
|||||||
fail-fast: false
|
fail-fast: false
|
||||||
matrix:
|
matrix:
|
||||||
operating-system: [ubuntu-latest, windows-latest, macos-latest]
|
operating-system: [ubuntu-latest, windows-latest, macos-latest]
|
||||||
php-versions: ['8.3', '8.4', '8.5']
|
php-versions: ['7.2', '7.3', '7.4']
|
||||||
steps:
|
steps:
|
||||||
- name: Checkout
|
- name: Checkout
|
||||||
uses: actions/checkout@v6
|
uses: actions/checkout@v2
|
||||||
|
- name: Setup PHP, with composer and extensions
|
||||||
# Docs: https://github.com/shivammathur/setup-php
|
uses: shivammathur/setup-php@v2 #https://github.com/shivammathur/setup-php
|
||||||
- name: Setup PHP
|
|
||||||
uses: shivammathur/setup-php@v2
|
|
||||||
with:
|
with:
|
||||||
php-version: ${{ matrix.php-versions }}
|
php-version: ${{ matrix.php-versions }}
|
||||||
extensions: mbstring, dom, fileinfo
|
extensions: mbstring, dom, fileinfo
|
||||||
coverage: xdebug
|
coverage: xdebug #optional
|
||||||
|
|
||||||
- name: Get composer cache directory
|
- name: Get composer cache directory
|
||||||
id: composer-cache
|
id: composer-cache
|
||||||
shell: bash
|
run: echo "::set-output name=dir::$(composer config cache-files-dir)"
|
||||||
run: echo "dir=$(composer config cache-files-dir)" >> $GITHUB_OUTPUT
|
|
||||||
|
|
||||||
- name: Cache composer dependencies
|
- name: Cache composer dependencies
|
||||||
uses: actions/cache@v5
|
uses: actions/cache@v2
|
||||||
with:
|
with:
|
||||||
path: ${{ steps.composer-cache.outputs.dir }}
|
path: ${{ steps.composer-cache.outputs.dir }}
|
||||||
# Use composer.json for key, if composer.lock is not committed.
|
# Use composer.json for key, if composer.lock is not committed.
|
||||||
# key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.json') }}
|
# key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.json') }}
|
||||||
key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.lock') }}
|
key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.lock') }}
|
||||||
restore-keys: ${{ runner.os }}-composer-
|
restore-keys: ${{ runner.os }}-composer-
|
||||||
|
|
||||||
- name: Install Composer dependencies
|
- name: Install Composer dependencies
|
||||||
run: composer install --no-progress --prefer-dist --optimize-autoloader
|
run: composer install --no-progress --prefer-dist --optimize-autoloader
|
||||||
|
|
||||||
- name: Prepare the application
|
- name: Prepare the application
|
||||||
run: |
|
run: |
|
||||||
php -r "file_exists('.env') || copy('.env.example', '.env');"
|
php -r "file_exists('.env') || copy('.env.example', '.env');"
|
||||||
php artisan key:generate
|
php artisan key:generate
|
||||||
|
|
||||||
- name: Clear Config
|
- name: Clear Config
|
||||||
run: php artisan config:clear
|
run: php artisan config:clear
|
||||||
|
|
||||||
- name: Test with phpunit
|
- name: Test with phpunit
|
||||||
run: vendor/bin/phpunit --coverage-text
|
run: vendor/bin/phpunit --coverage-text
|
||||||
@@ -13,11 +13,9 @@ jobs:
|
|||||||
CACHE_DRIVER: redis
|
CACHE_DRIVER: redis
|
||||||
QUEUE_CONNECTION: redis
|
QUEUE_CONNECTION: redis
|
||||||
SESSION_DRIVER: redis
|
SESSION_DRIVER: redis
|
||||||
|
|
||||||
# Docs: https://docs.github.com/en/actions/using-containerized-services
|
|
||||||
services:
|
services:
|
||||||
mysql:
|
mysql:
|
||||||
image: mysql:latest
|
image: mysql:5.7
|
||||||
env:
|
env:
|
||||||
MYSQL_ALLOW_EMPTY_PASSWORD: false
|
MYSQL_ALLOW_EMPTY_PASSWORD: false
|
||||||
MYSQL_ROOT_PASSWORD: password
|
MYSQL_ROOT_PASSWORD: password
|
||||||
@@ -25,7 +23,6 @@ jobs:
|
|||||||
ports:
|
ports:
|
||||||
- 3306/tcp
|
- 3306/tcp
|
||||||
options: --health-cmd="mysqladmin ping" --health-interval=10s --health-timeout=5s --health-retries=3
|
options: --health-cmd="mysqladmin ping" --health-interval=10s --health-timeout=5s --health-retries=3
|
||||||
|
|
||||||
redis:
|
redis:
|
||||||
image: redis
|
image: redis
|
||||||
ports:
|
ports:
|
||||||
@@ -34,56 +31,44 @@ jobs:
|
|||||||
strategy:
|
strategy:
|
||||||
fail-fast: false
|
fail-fast: false
|
||||||
matrix:
|
matrix:
|
||||||
php-versions: ['8.3', '8.4', '8.5']
|
php-versions: ['7.2', '7.3', '7.4']
|
||||||
steps:
|
steps:
|
||||||
- name: Checkout
|
- name: Checkout
|
||||||
uses: actions/checkout@v6
|
uses: actions/checkout@v2
|
||||||
|
- name: Setup PHP, with composer and extensions
|
||||||
# Docs: https://github.com/shivammathur/setup-php
|
uses: shivammathur/setup-php@v2 #https://github.com/shivammathur/setup-php
|
||||||
- name: Setup PHP
|
|
||||||
uses: shivammathur/setup-php@v2
|
|
||||||
with:
|
with:
|
||||||
php-version: ${{ matrix.php-versions }}
|
php-version: ${{ matrix.php-versions }}
|
||||||
extensions: mbstring, dom, fileinfo, mysql
|
extensions: mbstring, dom, fileinfo, mysql
|
||||||
coverage: xdebug
|
coverage: xdebug #optional
|
||||||
|
- name: Start mysql service
|
||||||
# Local MySQL service in GitHub hosted environments is disabled by default.
|
run: sudo /etc/init.d/mysql start
|
||||||
# If you are using it instead of service containers, make sure you start it.
|
|
||||||
# - name: Start mysql service
|
|
||||||
# run: sudo systemctl start mysql.service
|
|
||||||
|
|
||||||
- name: Get composer cache directory
|
- name: Get composer cache directory
|
||||||
id: composer-cache
|
id: composer-cache
|
||||||
run: echo "dir=$(composer config cache-files-dir)" >> $GITHUB_OUTPUT
|
run: echo "::set-output name=dir::$(composer config cache-files-dir)"
|
||||||
|
|
||||||
- name: Cache composer dependencies
|
- name: Cache composer dependencies
|
||||||
uses: actions/cache@v5
|
uses: actions/cache@v2
|
||||||
with:
|
with:
|
||||||
path: ${{ steps.composer-cache.outputs.dir }}
|
path: ${{ steps.composer-cache.outputs.dir }}
|
||||||
# Use composer.json for key, if composer.lock is not committed.
|
# Use composer.json for key, if composer.lock is not committed.
|
||||||
# key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.json') }}
|
# key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.json') }}
|
||||||
key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.lock') }}
|
key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.lock') }}
|
||||||
restore-keys: ${{ runner.os }}-composer-
|
restore-keys: ${{ runner.os }}-composer-
|
||||||
|
|
||||||
- name: Install Composer dependencies
|
- name: Install Composer dependencies
|
||||||
run: |
|
run: |
|
||||||
composer install --no-progress --prefer-dist --optimize-autoloader
|
composer install --no-progress --prefer-dist --optimize-autoloader
|
||||||
composer require predis/predis illuminate/redis
|
composer require predis/predis illuminate/redis
|
||||||
|
|
||||||
- name: Prepare the application
|
- name: Prepare the application
|
||||||
run: php -r "file_exists('.env') || copy('.env.example', '.env');"
|
run: php -r "file_exists('.env') || copy('.env.example', '.env');"
|
||||||
|
|
||||||
- name: Register Redis as service provider
|
- name: Register Redis as service provider
|
||||||
run: sed -i '$i\$app->register(Illuminate\\Redis\\RedisServiceProvider::class);' bootstrap/app.php
|
run: sed -i '$i\$app->register(Illuminate\\Redis\\RedisServiceProvider::class);' bootstrap/app.php
|
||||||
|
|
||||||
- name: Run Migration
|
- name: Run Migration
|
||||||
run: php artisan migrate -v
|
run: php artisan migrate -v
|
||||||
env:
|
env:
|
||||||
DB_PORT: ${{ job.services.mysql.ports['3306'] }}
|
DB_PORT: ${{ job.services.mysql.ports['3306'] }}
|
||||||
REDIS_PORT: ${{ job.services.redis.ports['6379'] }}
|
REDIS_PORT: ${{ job.services.redis.ports['6379'] }}
|
||||||
|
|
||||||
- name: Test with phpunit
|
- name: Test with phpunit
|
||||||
run: vendor/bin/phpunit --coverage-text --coverage-filter app
|
run: vendor/bin/phpunit --coverage-text
|
||||||
env:
|
env:
|
||||||
DB_PORT: ${{ job.services.mysql.ports['3306'] }}
|
DB_PORT: ${{ job.services.mysql.ports['3306'] }}
|
||||||
REDIS_PORT: ${{ job.services.redis.ports['6379'] }}
|
REDIS_PORT: ${{ job.services.redis.ports['6379'] }}
|
||||||
@@ -11,15 +11,13 @@ jobs:
|
|||||||
QUEUE_CONNECTION: redis
|
QUEUE_CONNECTION: redis
|
||||||
SESSION_DRIVER: redis
|
SESSION_DRIVER: redis
|
||||||
DB_CONNECTION: pgsql
|
DB_CONNECTION: pgsql
|
||||||
DB_HOST: 127.0.0.1
|
DB_HOST: localhost
|
||||||
DB_PASSWORD: postgres
|
DB_PASSWORD: postgres
|
||||||
DB_USERNAME: postgres
|
DB_USERNAME: postgres
|
||||||
DB_DATABASE: postgres
|
DB_DATABASE: postgres
|
||||||
|
|
||||||
# Docs: https://docs.github.com/en/actions/using-containerized-services
|
|
||||||
services:
|
services:
|
||||||
postgres:
|
postgres:
|
||||||
image: postgres:latest
|
image: postgres:10.8
|
||||||
env:
|
env:
|
||||||
POSTGRES_USER: postgres
|
POSTGRES_USER: postgres
|
||||||
POSTGRES_PASSWORD: postgres
|
POSTGRES_PASSWORD: postgres
|
||||||
@@ -27,7 +25,6 @@ jobs:
|
|||||||
ports:
|
ports:
|
||||||
- 5432/tcp
|
- 5432/tcp
|
||||||
options: --health-cmd pg_isready --health-interval 10s --health-timeout 5s --health-retries 3
|
options: --health-cmd pg_isready --health-interval 10s --health-timeout 5s --health-retries 3
|
||||||
|
|
||||||
redis:
|
redis:
|
||||||
image: redis
|
image: redis
|
||||||
ports:
|
ports:
|
||||||
@@ -36,56 +33,42 @@ jobs:
|
|||||||
strategy:
|
strategy:
|
||||||
fail-fast: false
|
fail-fast: false
|
||||||
matrix:
|
matrix:
|
||||||
php-versions: ['8.3', '8.4', '8.5']
|
php-versions: ['7.2', '7.3', '7.4']
|
||||||
steps:
|
steps:
|
||||||
- name: Checkout
|
- name: Checkout
|
||||||
uses: actions/checkout@v6
|
uses: actions/checkout@v2
|
||||||
|
- name: Setup PHP, with composer and extensions
|
||||||
# Docs: https://github.com/shivammathur/setup-php
|
uses: shivammathur/setup-php@v2 #https://github.com/shivammathur/setup-php
|
||||||
- name: Setup PHP
|
|
||||||
uses: shivammathur/setup-php@v2
|
|
||||||
with:
|
with:
|
||||||
php-version: ${{ matrix.php-versions }}
|
php-version: ${{ matrix.php-versions }}
|
||||||
extensions: mbstring, dom, fileinfo, pgsql
|
extensions: mbstring, dom, fileinfo, pgsql
|
||||||
coverage: none
|
coverage: xdebug #optional
|
||||||
|
|
||||||
# Local PostgreSQL service in GitHub hosted environments is disabled by default.
|
|
||||||
# If you are using it instead of service containers, make sure you start it.
|
|
||||||
# - name: Start postgresql service
|
|
||||||
# run: sudo systemctl start postgresql.service
|
|
||||||
|
|
||||||
- name: Get composer cache directory
|
- name: Get composer cache directory
|
||||||
id: composer-cache
|
id: composer-cache
|
||||||
run: echo "dir=$(composer config cache-files-dir)" >> $GITHUB_OUTPUT
|
run: echo "::set-output name=dir::$(composer config cache-files-dir)"
|
||||||
|
|
||||||
- name: Cache composer dependencies
|
- name: Cache composer dependencies
|
||||||
uses: actions/cache@v5
|
uses: actions/cache@v2
|
||||||
with:
|
with:
|
||||||
path: ${{ steps.composer-cache.outputs.dir }}
|
path: ${{ steps.composer-cache.outputs.dir }}
|
||||||
# Use composer.json for key, if composer.lock is not committed.
|
# Use composer.json for key, if composer.lock is not committed.
|
||||||
# key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.json') }}
|
# key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.json') }}
|
||||||
key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.lock') }}
|
key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.lock') }}
|
||||||
restore-keys: ${{ runner.os }}-composer-
|
restore-keys: ${{ runner.os }}-composer-
|
||||||
|
|
||||||
- name: Install Composer dependencies
|
- name: Install Composer dependencies
|
||||||
run: |
|
run: |
|
||||||
composer install --no-progress --prefer-dist --optimize-autoloader
|
composer install --no-progress --prefer-dist --optimize-autoloader
|
||||||
composer require predis/predis illuminate/redis
|
composer require predis/predis illuminate/redis
|
||||||
|
|
||||||
- name: Prepare the application
|
- name: Prepare the application
|
||||||
run: php -r "file_exists('.env') || copy('.env.example', '.env');"
|
run: php -r "file_exists('.env') || copy('.env.example', '.env');"
|
||||||
|
|
||||||
- name: Register Redis as service provider
|
- name: Register Redis as service provider
|
||||||
run: sed -i '$i\$app->register(Illuminate\\Redis\\RedisServiceProvider::class);' bootstrap/app.php
|
run: sed -i '$i\$app->register(Illuminate\\Redis\\RedisServiceProvider::class);' bootstrap/app.php
|
||||||
|
|
||||||
- name: Run Migration
|
- name: Run Migration
|
||||||
run: php artisan migrate -v
|
run: php artisan migrate -v
|
||||||
env:
|
env:
|
||||||
DB_PORT: ${{ job.services.postgres.ports['5432'] }}
|
DB_PORT: ${{ job.services.postgres.ports[5432] }}
|
||||||
REDIS_PORT: ${{ job.services.redis.ports['6379'] }}
|
REDIS_PORT: ${{ job.services.redis.ports['6379'] }}
|
||||||
|
|
||||||
- name: Test with phpunit
|
- name: Test with phpunit
|
||||||
run: vendor/bin/phpunit
|
run: vendor/bin/phpunit --coverage-text
|
||||||
env:
|
env:
|
||||||
DB_PORT: ${{ job.services.postgres.ports['5432'] }}
|
DB_PORT: ${{ job.services.postgres.ports[5432] }}
|
||||||
REDIS_PORT: ${{ job.services.redis.ports['6379'] }}
|
REDIS_PORT: ${{ job.services.redis.ports['6379'] }}
|
||||||
|
|||||||
@@ -9,38 +9,30 @@ jobs:
|
|||||||
fail-fast: false
|
fail-fast: false
|
||||||
matrix:
|
matrix:
|
||||||
operating-system: [ubuntu-latest, windows-latest, macos-latest]
|
operating-system: [ubuntu-latest, windows-latest, macos-latest]
|
||||||
php-versions: ['8.3', '8.4', '8.5']
|
php-versions: ['7.2', '7.3', '7.4']
|
||||||
steps:
|
steps:
|
||||||
- name: Checkout
|
- name: Checkout
|
||||||
uses: actions/checkout@v6
|
uses: actions/checkout@v2
|
||||||
|
- name: Setup PHP, with composer and extensions
|
||||||
# Docs: https://github.com/shivammathur/setup-php
|
uses: shivammathur/setup-php@v2 #https://github.com/shivammathur/setup-php
|
||||||
- name: Setup PHP
|
|
||||||
uses: shivammathur/setup-php@v2
|
|
||||||
with:
|
with:
|
||||||
php-version: ${{ matrix.php-versions }}
|
php-version: ${{ matrix.php-versions }}
|
||||||
extensions: mbstring, dom, fileinfo, mysql
|
extensions: mbstring, dom, fileinfo, mysql
|
||||||
coverage: xdebug
|
coverage: xdebug #optional
|
||||||
|
|
||||||
- name: Get composer cache directory
|
- name: Get composer cache directory
|
||||||
id: composer-cache
|
id: composer-cache
|
||||||
shell: bash
|
run: echo "::set-output name=dir::$(composer config cache-files-dir)"
|
||||||
run: echo "dir=$(composer config cache-files-dir)" >> $GITHUB_OUTPUT
|
|
||||||
|
|
||||||
- name: Cache composer dependencies
|
- name: Cache composer dependencies
|
||||||
uses: actions/cache@v5
|
uses: actions/cache@v2
|
||||||
with:
|
with:
|
||||||
path: ${{ steps.composer-cache.outputs.dir }}
|
path: ${{ steps.composer-cache.outputs.dir }}
|
||||||
# Use composer.json for key, if composer.lock is not committed.
|
# Use composer.json for key, if composer.lock is not committed.
|
||||||
# key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.json') }}
|
# key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.json') }}
|
||||||
key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.lock') }}
|
key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.lock') }}
|
||||||
restore-keys: ${{ runner.os }}-composer-
|
restore-keys: ${{ runner.os }}-composer-
|
||||||
|
|
||||||
- name: Install Composer dependencies
|
- name: Install Composer dependencies
|
||||||
run: composer install --no-progress --prefer-dist --optimize-autoloader
|
run: composer install --no-progress --prefer-dist --optimize-autoloader
|
||||||
|
|
||||||
- name: Prepare the application
|
- name: Prepare the application
|
||||||
run: php -r "file_exists('.env') || copy('.env.example', '.env');"
|
run: php -r "file_exists('.env') || copy('.env.example', '.env');"
|
||||||
|
|
||||||
- name: Test with phpunit
|
- name: Test with phpunit
|
||||||
run: vendor/bin/phpunit --coverage-text --coverage-filter app
|
run: vendor/bin/phpunit --coverage-text
|
||||||
@@ -11,20 +11,18 @@ jobs:
|
|||||||
env:
|
env:
|
||||||
DB_ADAPTER: mysql
|
DB_ADAPTER: mysql
|
||||||
DB_HOST: 127.0.0.1
|
DB_HOST: 127.0.0.1
|
||||||
DB_NAME: vokuro
|
DB_NAME: phalcon
|
||||||
DB_USERNAME: root
|
DB_USERNAME: root
|
||||||
DB_PASSWORD: password
|
DB_PASSWORD: password
|
||||||
CODECEPTION_URL: 127.0.0.1
|
CODECEPTION_URL: 127.0.0.1
|
||||||
CODECEPTION_PORT: 8888
|
CODECEPTION_PORT: 8888
|
||||||
|
|
||||||
# Docs: https://docs.github.com/en/actions/using-containerized-services
|
|
||||||
services:
|
services:
|
||||||
mysql:
|
mysql:
|
||||||
image: mysql:5.7
|
image: mysql:5.7
|
||||||
env:
|
env:
|
||||||
MYSQL_ALLOW_EMPTY_PASSWORD: false
|
MYSQL_ALLOW_EMPTY_PASSWORD: false
|
||||||
MYSQL_ROOT_PASSWORD: password
|
MYSQL_ROOT_PASSWORD: password
|
||||||
MYSQL_DATABASE: vokuro
|
MYSQL_DATABASE: phalcon
|
||||||
ports:
|
ports:
|
||||||
- 3306/tcp
|
- 3306/tcp
|
||||||
options: --health-cmd="mysqladmin ping" --health-interval=10s --health-timeout=5s --health-retries=3
|
options: --health-cmd="mysqladmin ping" --health-interval=10s --health-timeout=5s --health-retries=3
|
||||||
@@ -32,50 +30,41 @@ jobs:
|
|||||||
fail-fast: false
|
fail-fast: false
|
||||||
matrix:
|
matrix:
|
||||||
php-versions: ['7.2', '7.3', '7.4']
|
php-versions: ['7.2', '7.3', '7.4']
|
||||||
|
# For phalcon 3.x, use
|
||||||
|
# php-versions: ['7.0', '7.1', '7.2', '7.3']
|
||||||
steps:
|
steps:
|
||||||
- name: Checkout
|
- name: Checkout
|
||||||
uses: actions/checkout@v6
|
uses: actions/checkout@v2
|
||||||
|
- name: Setup PHP, with composer and extensions
|
||||||
# Docs: https://github.com/shivammathur/setup-php
|
uses: shivammathur/setup-php@v2 #https://github.com/shivammathur/setup-php
|
||||||
- name: Setup PHP
|
|
||||||
uses: shivammathur/setup-php@v2
|
|
||||||
with:
|
with:
|
||||||
php-version: ${{ matrix.php-versions }}
|
php-version: ${{ matrix.php-versions }}
|
||||||
# Use phalcon4 for the latest compatible Vokuro sample release.
|
extensions: mbstring, dom, zip, phalcon4, mysql #use phalcon3 for the phalcon 3.x.
|
||||||
extensions: mbstring, dom, zip, phalcon4, mysql
|
coverage: xdebug #optional
|
||||||
coverage: xdebug
|
- name: Start mysql service
|
||||||
|
run: sudo /etc/init.d/mysql start
|
||||||
# Local MySQL service in GitHub hosted environments is disabled by default.
|
|
||||||
# If you are using it instead of service containers, make sure you start it.
|
|
||||||
# - name: Start mysql service
|
|
||||||
# run: sudo systemctl start mysql.service
|
|
||||||
|
|
||||||
- name: Get composer cache directory
|
- name: Get composer cache directory
|
||||||
id: composer-cache
|
id: composer-cache
|
||||||
run: echo "dir=$(composer config cache-files-dir)" >> $GITHUB_OUTPUT
|
run: echo "::set-output name=dir::$(composer config cache-files-dir)"
|
||||||
|
|
||||||
- name: Cache composer dependencies
|
- name: Cache composer dependencies
|
||||||
uses: actions/cache@v5
|
uses: actions/cache@v2
|
||||||
with:
|
with:
|
||||||
path: ${{ steps.composer-cache.outputs.dir }}
|
path: ${{ steps.composer-cache.outputs.dir }}
|
||||||
# Use composer.json for key, if composer.lock is not committed.
|
# Use composer.json for key, if composer.lock is not committed.
|
||||||
# key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.json') }}
|
# key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.json') }}
|
||||||
key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.lock') }}
|
key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.lock') }}
|
||||||
restore-keys: ${{ runner.os }}-composer-
|
restore-keys: ${{ runner.os }}-composer-
|
||||||
|
|
||||||
- name: Install Composer dependencies
|
- name: Install Composer dependencies
|
||||||
run: composer install --no-progress --prefer-dist --optimize-autoloader
|
run: composer install --no-progress --prefer-dist --optimize-autoloader
|
||||||
|
|
||||||
- name: Prepare the application
|
- name: Prepare the application
|
||||||
run: php -r "file_exists('.env') || copy('.env.example', '.env');"
|
run: php -r "file_exists('.env') || copy('.env.example', '.env');"
|
||||||
|
|
||||||
- name: Run Migration
|
- name: Run Migration
|
||||||
run: |
|
run: |
|
||||||
|
if [ ! -e phinx.yml ]; then vendor/bin/phinx init; fi
|
||||||
vendor/bin/phinx migrate
|
vendor/bin/phinx migrate
|
||||||
vendor/bin/phinx seed:run
|
vendor/bin/phinx seed:run
|
||||||
env:
|
env:
|
||||||
DB_PORT: ${{ job.services.mysql.ports['3306'] }}
|
DB_PORT: ${{ job.services.mysql.ports['3306'] }}
|
||||||
|
|
||||||
- name: Run Tests
|
- name: Run Tests
|
||||||
run: |
|
run: |
|
||||||
(cd public && nohup php -S $CODECEPTION_URL:$CODECEPTION_PORT > phalcon.log 2>&1 &)
|
(cd public && nohup php -S $CODECEPTION_URL:$CODECEPTION_PORT > phalcon.log 2>&1 &)
|
||||||
|
|||||||
@@ -11,18 +11,19 @@ jobs:
|
|||||||
env:
|
env:
|
||||||
DB_ADAPTER: pgsql
|
DB_ADAPTER: pgsql
|
||||||
DB_HOST: 127.0.0.1
|
DB_HOST: 127.0.0.1
|
||||||
DB_NAME: vokuro
|
DB_NAME: postgres
|
||||||
DB_USERNAME: postgres
|
DB_USERNAME: postgres
|
||||||
DB_PASSWORD: postgres
|
DB_PASSWORD: postgres
|
||||||
CODECEPTION_URL: 127.0.0.1
|
CODECEPTION_URL: 127.0.0.1
|
||||||
CODECEPTION_PORT: 8888
|
CODECEPTION_PORT: 8888
|
||||||
|
DB_CONNECTION: pgsql
|
||||||
services:
|
services:
|
||||||
postgres:
|
postgres:
|
||||||
image: postgres:latest
|
image: postgres:10.8
|
||||||
env:
|
env:
|
||||||
POSTGRES_USER: postgres
|
POSTGRES_USER: postgres
|
||||||
POSTGRES_PASSWORD: postgres
|
POSTGRES_PASSWORD: postgres
|
||||||
POSTGRES_DB: vokuro
|
POSTGRES_DB: postgres
|
||||||
ports:
|
ports:
|
||||||
- 5432/tcp
|
- 5432/tcp
|
||||||
options: --health-cmd pg_isready --health-interval 10s --health-timeout 5s --health-retries 3
|
options: --health-cmd pg_isready --health-interval 10s --health-timeout 5s --health-retries 3
|
||||||
@@ -30,48 +31,42 @@ jobs:
|
|||||||
fail-fast: false
|
fail-fast: false
|
||||||
matrix:
|
matrix:
|
||||||
php-versions: ['7.2', '7.3', '7.4']
|
php-versions: ['7.2', '7.3', '7.4']
|
||||||
|
# For phalcon 3.x, use
|
||||||
|
# php-versions: ['7.0', '7.1', '7.2', '7.3']
|
||||||
steps:
|
steps:
|
||||||
- name: Checkout
|
- name: Checkout
|
||||||
uses: actions/checkout@v6
|
uses: actions/checkout@v2
|
||||||
|
- name: Setup PHP, with composer and extensions
|
||||||
# Docs: https://github.com/shivammathur/setup-php
|
uses: shivammathur/setup-php@v2 #https://github.com/shivammathur/setup-php
|
||||||
- name: Setup PHP
|
|
||||||
uses: shivammathur/setup-php@v2
|
|
||||||
with:
|
with:
|
||||||
php-version: ${{ matrix.php-versions }}
|
php-version: ${{ matrix.php-versions }}
|
||||||
extensions: mbstring, dom, zip, phalcon4, pgsql
|
extensions: mbstring, dom, zip, phalcon4, pgsql #use phalcon3 for the phalcon 3.x
|
||||||
coverage: xdebug
|
coverage: xdebug #optional
|
||||||
|
|
||||||
- name: Get composer cache directory
|
- name: Get composer cache directory
|
||||||
id: composer-cache
|
id: composer-cache
|
||||||
run: echo "dir=$(composer config cache-files-dir)" >> $GITHUB_OUTPUT
|
run: echo "::set-output name=dir::$(composer config cache-files-dir)"
|
||||||
|
|
||||||
- name: Cache composer dependencies
|
- name: Cache composer dependencies
|
||||||
uses: actions/cache@v5
|
uses: actions/cache@v2
|
||||||
with:
|
with:
|
||||||
path: ${{ steps.composer-cache.outputs.dir }}
|
path: ${{ steps.composer-cache.outputs.dir }}
|
||||||
|
# Use composer.json for key, if composer.lock is not committed.
|
||||||
|
# key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.json') }}
|
||||||
key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.lock') }}
|
key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.lock') }}
|
||||||
restore-keys: ${{ runner.os }}-composer-
|
restore-keys: ${{ runner.os }}-composer-
|
||||||
|
|
||||||
- name: Install Composer dependencies
|
- name: Install Composer dependencies
|
||||||
run: composer install --no-progress --prefer-dist --optimize-autoloader --no-security-blocking
|
run: composer install --no-progress --prefer-dist --optimize-autoloader
|
||||||
|
|
||||||
- name: Prepare the application
|
- name: Prepare the application
|
||||||
run: |
|
run: php -r "file_exists('.env') || copy('.env.example', '.env');"
|
||||||
php -r "file_exists('.env') || copy('.env.example', '.env');"
|
|
||||||
mkdir -p var/cache/acl var/cache/metaData var/cache/session var/cache/volt var/logs
|
|
||||||
chmod -R 777 var/cache var/logs
|
|
||||||
|
|
||||||
- name: Run Migration
|
- name: Run Migration
|
||||||
run: |
|
run: |
|
||||||
|
if [ ! -e phinx.yml ]; then vendor/bin/phinx init; fi
|
||||||
vendor/bin/phinx migrate
|
vendor/bin/phinx migrate
|
||||||
vendor/bin/phinx seed:run
|
vendor/bin/phinx seed:run
|
||||||
env:
|
env:
|
||||||
DB_PORT: ${{ job.services.postgres.ports['5432'] }}
|
DB_PORT: ${{ job.services.postgres.ports['5432'] }}
|
||||||
|
|
||||||
- name: Run Tests
|
- name: Run Tests
|
||||||
run: |
|
run: |
|
||||||
(cd public && nohup php -S $CODECEPTION_URL:$CODECEPTION_PORT > vokuro.log 2>&1 &)
|
(cd public && nohup php -S $CODECEPTION_URL:$CODECEPTION_PORT > phalcon.log 2>&1 &)
|
||||||
vendor/bin/codecept build
|
vendor/bin/codecept build
|
||||||
vendor/bin/codecept run
|
vendor/bin/codecept run
|
||||||
env:
|
env:
|
||||||
|
|||||||
@@ -8,55 +8,50 @@ jobs:
|
|||||||
strategy:
|
strategy:
|
||||||
fail-fast: false
|
fail-fast: false
|
||||||
matrix:
|
matrix:
|
||||||
php-versions: ['8.3', '8.4', '8.5']
|
php-versions: ['7.1', '7.2', '7.3', '7.4']
|
||||||
node-versions: ['20']
|
node-versions: ['8', '10']
|
||||||
steps:
|
steps:
|
||||||
- name: Checkout
|
- name: Checkout
|
||||||
uses: actions/checkout@v6
|
uses: actions/checkout@v2
|
||||||
|
|
||||||
- name: Setup Node.js
|
- name: Setup Node.js
|
||||||
uses: actions/setup-node@v5
|
uses: actions/setup-node@v1
|
||||||
with:
|
with:
|
||||||
node-version: ${{ matrix.node-versions }}
|
node-version: ${{ matrix.node-versions }}
|
||||||
|
- name: Setup PHP, with composer and extensions
|
||||||
# Docs: https://github.com/shivammathur/setup-php
|
uses: shivammathur/setup-php@v2 #https://github.com/shivammathur/setup-php
|
||||||
- name: Setup PHP
|
|
||||||
uses: shivammathur/setup-php@v2
|
|
||||||
with:
|
with:
|
||||||
php-version: ${{ matrix.php-versions }}
|
php-version: ${{ matrix.php-versions }}
|
||||||
extensions: mbstring
|
extensions: mbstring
|
||||||
|
|
||||||
- name: Check node versions
|
- name: Check node versions
|
||||||
run: node -v
|
run: node -v
|
||||||
|
|
||||||
- name: Get yarn cache
|
- name: Get yarn cache
|
||||||
id: yarn-cache
|
id: yarn-cache
|
||||||
run: echo "dir=$(yarn cache dir)" >> $GITHUB_OUTPUT
|
run: echo "::set-output name=dir::$(yarn cache dir)"
|
||||||
|
- uses: actions/cache@v2
|
||||||
- uses: actions/cache@v5
|
|
||||||
with:
|
with:
|
||||||
path: ${{ steps.yarn-cache.outputs.dir }}
|
path: ${{ steps.yarn-cache.outputs.dir }}
|
||||||
key: ${{ runner.os }}-yarn-${{ hashFiles('**/yarn.lock') }}
|
key: ${{ runner.os }}-yarn-${{ hashFiles('**/yarn.lock') }}
|
||||||
restore-keys: ${{ runner.os }}-yarn-
|
restore-keys: ${{ runner.os }}-yarn-
|
||||||
|
|
||||||
- name: Get composer cache directory
|
- name: Get composer cache directory
|
||||||
id: composer-cache
|
id: composer-cache
|
||||||
run: echo "dir=$(composer config cache-files-dir)" >> $GITHUB_OUTPUT
|
run: echo "::set-output name=dir::$(composer config cache-files-dir)"
|
||||||
|
|
||||||
- name: Cache composer dependencies
|
- name: Cache composer dependencies
|
||||||
uses: actions/cache@v5
|
uses: actions/cache@v2
|
||||||
with:
|
with:
|
||||||
path: ${{ steps.composer-cache.outputs.dir }}
|
path: ${{ steps.composer-cache.outputs.dir }}
|
||||||
# Use composer.json for key, if composer.lock is not committed.
|
# Use composer.json for key, if composer.lock is not committed.
|
||||||
# key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.json') }}
|
# key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.json') }}
|
||||||
key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.lock') }}
|
key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.lock') }}
|
||||||
restore-keys: ${{ runner.os }}-composer-
|
restore-keys: ${{ runner.os }}-composer-
|
||||||
|
|
||||||
- name: Install yarn dependencies
|
- name: Install yarn dependencies
|
||||||
run: yarn install --frozen-lockfile --non-interactive
|
run: yarn -V
|
||||||
|
|
||||||
- name: Install Composer dependencies
|
- name: Install Composer dependencies
|
||||||
run: composer install --no-progress --prefer-dist --optimize-autoloader
|
run: composer install --no-progress --prefer-dist --optimize-autoloader
|
||||||
|
- name: Yarn test and build
|
||||||
- name: Yarn build
|
run: |
|
||||||
run: yarn build
|
yarn run test
|
||||||
|
yarn run build
|
||||||
|
yarn run rmdist
|
||||||
|
yarn run "build:production"
|
||||||
|
- name: PHP test
|
||||||
|
run: composer test
|
||||||
@@ -6,36 +6,29 @@ jobs:
|
|||||||
strategy:
|
strategy:
|
||||||
matrix:
|
matrix:
|
||||||
operating-system: [ubuntu-latest, windows-latest, macos-latest]
|
operating-system: [ubuntu-latest, windows-latest, macos-latest]
|
||||||
php-versions: ['8.3', '8.4', '8.5']
|
php-versions: ['7.2', '7.3', '7.4']
|
||||||
runs-on: ${{ matrix.operating-system }}
|
runs-on: ${{ matrix.operating-system }}
|
||||||
steps:
|
steps:
|
||||||
- name: Checkout
|
- name: Checkout
|
||||||
uses: actions/checkout@v6
|
uses: actions/checkout@v2
|
||||||
|
- name: Setup PHP, with composer and extensions
|
||||||
# Docs: https://github.com/shivammathur/setup-php
|
uses: shivammathur/setup-php@v2 #https://github.com/shivammathur/setup-php
|
||||||
- name: Setup PHP
|
|
||||||
uses: shivammathur/setup-php@v2
|
|
||||||
with:
|
with:
|
||||||
php-version: ${{ matrix.php-versions }}
|
php-version: ${{ matrix.php-versions }}
|
||||||
extensions: mbstring, simplexml, dom
|
extensions: mbstring, simplexml, dom
|
||||||
coverage: xdebug
|
coverage: xdebug #optional
|
||||||
|
|
||||||
- name: Get composer cache directory
|
- name: Get composer cache directory
|
||||||
id: composer-cache
|
id: composer-cache
|
||||||
shell: bash
|
run: echo "::set-output name=dir::$(composer config cache-files-dir)"
|
||||||
run: echo "dir=$(composer config cache-files-dir)" >> $GITHUB_OUTPUT
|
|
||||||
|
|
||||||
- name: Cache composer dependencies
|
- name: Cache composer dependencies
|
||||||
uses: actions/cache@v5
|
uses: actions/cache@v2
|
||||||
with:
|
with:
|
||||||
path: ${{ steps.composer-cache.outputs.dir }}
|
path: ${{ steps.composer-cache.outputs.dir }}
|
||||||
# Use composer.json for key, if composer.lock is not committed.
|
# Use composer.json for key, if composer.lock is not committed.
|
||||||
# key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.json') }}
|
# key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.json') }}
|
||||||
key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.lock') }}
|
key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.lock') }}
|
||||||
restore-keys: ${{ runner.os }}-composer-
|
restore-keys: ${{ runner.os }}-composer-
|
||||||
|
|
||||||
- name: Install dependencies
|
- name: Install dependencies
|
||||||
run: composer install --no-progress --prefer-dist --optimize-autoloader
|
run: composer install --no-progress --prefer-dist --optimize-autoloader
|
||||||
|
|
||||||
- name: Test with phpunit
|
- name: Test with phpunit
|
||||||
run: vendor/bin/phpunit --coverage-text
|
run: vendor/bin/phpunit --coverage-text
|
||||||
@@ -5,13 +5,9 @@ jobs:
|
|||||||
symfony:
|
symfony:
|
||||||
name: Symfony (PHP ${{ matrix.php-versions }})
|
name: Symfony (PHP ${{ matrix.php-versions }})
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
env:
|
|
||||||
APP_ENV: test
|
|
||||||
|
|
||||||
# Docs: https://docs.github.com/en/actions/using-containerized-services
|
|
||||||
services:
|
services:
|
||||||
mysql:
|
mysql:
|
||||||
image: mysql:8.4
|
image: mysql:5.7
|
||||||
env:
|
env:
|
||||||
MYSQL_ALLOW_EMPTY_PASSWORD: false
|
MYSQL_ALLOW_EMPTY_PASSWORD: false
|
||||||
MYSQL_ROOT_PASSWORD: symfony
|
MYSQL_ROOT_PASSWORD: symfony
|
||||||
@@ -22,49 +18,39 @@ jobs:
|
|||||||
strategy:
|
strategy:
|
||||||
fail-fast: false
|
fail-fast: false
|
||||||
matrix:
|
matrix:
|
||||||
php-versions: ['8.4', '8.5', '8.6']
|
php-versions: ['7.3', '7.4']
|
||||||
steps:
|
steps:
|
||||||
- name: Checkout
|
- name: Checkout
|
||||||
uses: actions/checkout@v6
|
uses: actions/checkout@v2
|
||||||
|
- name: Setup PHP, with composer and extensions
|
||||||
# Docs: https://github.com/shivammathur/setup-php
|
uses: shivammathur/setup-php@v2 #https://github.com/shivammathur/setup-php
|
||||||
- name: Setup PHP
|
|
||||||
uses: shivammathur/setup-php@v2
|
|
||||||
with:
|
with:
|
||||||
php-version: ${{ matrix.php-versions }}
|
php-version: ${{ matrix.php-versions }}
|
||||||
extensions: mbstring, xml, ctype, iconv, intl, pdo_sqlite, mysql
|
extensions: mbstring, xml, ctype, iconv, intl, pdo_sqlite, mysql
|
||||||
coverage: xdebug
|
coverage: xdebug #optional
|
||||||
|
- name: Start mysql service
|
||||||
# Local MySQL service in GitHub hosted environments is disabled by default.
|
run: sudo /etc/init.d/mysql start
|
||||||
# If you are using it instead of service containers, make sure you start it.
|
|
||||||
# - name: Start mysql service
|
|
||||||
# run: sudo systemctl start mysql.service
|
|
||||||
|
|
||||||
- name: Get composer cache directory
|
- name: Get composer cache directory
|
||||||
id: composer-cache
|
id: composer-cache
|
||||||
run: echo "dir=$(composer config cache-files-dir)" >> $GITHUB_OUTPUT
|
run: echo "::set-output name=dir::$(composer config cache-files-dir)"
|
||||||
|
|
||||||
- name: Cache composer dependencies
|
- name: Cache composer dependencies
|
||||||
uses: actions/cache@v5
|
uses: actions/cache@v2
|
||||||
with:
|
with:
|
||||||
path: ${{ steps.composer-cache.outputs.dir }}
|
path: ${{ steps.composer-cache.outputs.dir }}
|
||||||
# Use composer.json for key, if composer.lock is not committed.
|
# Use composer.json for key, if composer.lock is not committed.
|
||||||
# key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.json') }}
|
# key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.json') }}
|
||||||
key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.lock') }}
|
key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.lock') }}
|
||||||
restore-keys: ${{ runner.os }}-composer-
|
restore-keys: ${{ runner.os }}-composer-
|
||||||
|
|
||||||
- name: Install Composer dependencies
|
- name: Install Composer dependencies
|
||||||
run: composer install --no-interaction --no-progress --prefer-dist --optimize-autoloader
|
|
||||||
|
|
||||||
- name: Prepare database
|
|
||||||
run: |
|
run: |
|
||||||
php bin/console doctrine:database:create --if-not-exists --no-interaction
|
composer require --dev symfony/orm-pack symfony/phpunit-bridge
|
||||||
php bin/console doctrine:schema:create --no-interaction
|
composer install --no-progress --prefer-dist --optimize-autoloader
|
||||||
php bin/console doctrine:fixtures:load --no-interaction
|
php bin/phpunit install
|
||||||
|
- name: Run Migration
|
||||||
|
run: |
|
||||||
|
php bin/console doctrine:schema:update --force || echo "No migrations found or schema update failed"
|
||||||
|
php bin/console doctrine:migrations:migrate || echo "No migrations found or migration failed"
|
||||||
env:
|
env:
|
||||||
DATABASE_URL: mysql://root:symfony@127.0.0.1:${{ job.services.mysql.ports['3306'] }}/symfony?serverVersion=8.4&charset=utf8mb4
|
DATABASE_URL: mysql://root:symfony@127.0.0.1:${{ job.services.mysql.ports['3306'] }}/symfony
|
||||||
|
- name: Run Tests
|
||||||
- name: Run tests
|
|
||||||
run: php bin/phpunit --coverage-text
|
run: php bin/phpunit --coverage-text
|
||||||
env:
|
|
||||||
DATABASE_URL: mysql://root:symfony@127.0.0.1:${{ job.services.mysql.ports['3306'] }}/symfony?serverVersion=8.4&charset=utf8mb4
|
|
||||||
|
|||||||
@@ -5,13 +5,9 @@ jobs:
|
|||||||
symfony:
|
symfony:
|
||||||
name: Symfony (PHP ${{ matrix.php-versions }})
|
name: Symfony (PHP ${{ matrix.php-versions }})
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
env:
|
|
||||||
APP_ENV: test
|
|
||||||
|
|
||||||
# Docs: https://docs.github.com/en/actions/using-containerized-services
|
|
||||||
services:
|
services:
|
||||||
postgres:
|
postgres:
|
||||||
image: postgres:16
|
image: postgres:10.8
|
||||||
env:
|
env:
|
||||||
POSTGRES_USER: postgres
|
POSTGRES_USER: postgres
|
||||||
POSTGRES_PASSWORD: postgres
|
POSTGRES_PASSWORD: postgres
|
||||||
@@ -22,49 +18,37 @@ jobs:
|
|||||||
strategy:
|
strategy:
|
||||||
fail-fast: false
|
fail-fast: false
|
||||||
matrix:
|
matrix:
|
||||||
php-versions: ['8.4', '8.5', '8.6']
|
php-versions: ['7.3', '7.4']
|
||||||
steps:
|
steps:
|
||||||
- name: Checkout
|
- name: Checkout
|
||||||
uses: actions/checkout@v6
|
uses: actions/checkout@v2
|
||||||
|
- name: Setup PHP, with composer and extensions
|
||||||
# Docs: https://github.com/shivammathur/setup-php
|
uses: shivammathur/setup-php@v2 #https://github.com/shivammathur/setup-php
|
||||||
- name: Setup PHP
|
|
||||||
uses: shivammathur/setup-php@v2
|
|
||||||
with:
|
with:
|
||||||
php-version: ${{ matrix.php-versions }}
|
php-version: ${{ matrix.php-versions }}
|
||||||
extensions: mbstring, xml, ctype, iconv, intl, pdo_pgsql, pgsql
|
extensions: mbstring, xml, ctype, iconv, intl, pdo_sqlite, pgsql
|
||||||
coverage: xdebug
|
coverage: xdebug #optional
|
||||||
|
|
||||||
# Local PostgreSQL service in GitHub hosted environments is disabled by default.
|
|
||||||
# If you are using it instead of service containers, make sure you start it.
|
|
||||||
# - name: Start postgresql service
|
|
||||||
# run: sudo systemctl start postgresql.service
|
|
||||||
|
|
||||||
- name: Get composer cache directory
|
- name: Get composer cache directory
|
||||||
id: composer-cache
|
id: composer-cache
|
||||||
run: echo "dir=$(composer config cache-files-dir)" >> $GITHUB_OUTPUT
|
run: echo "::set-output name=dir::$(composer config cache-files-dir)"
|
||||||
|
|
||||||
- name: Cache composer dependencies
|
- name: Cache composer dependencies
|
||||||
uses: actions/cache@v5
|
uses: actions/cache@v2
|
||||||
with:
|
with:
|
||||||
path: ${{ steps.composer-cache.outputs.dir }}
|
path: ${{ steps.composer-cache.outputs.dir }}
|
||||||
# Use composer.json for key, if composer.lock is not committed.
|
# Use composer.json for key, if composer.lock is not committed.
|
||||||
# key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.json') }}
|
# key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.json') }}
|
||||||
key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.lock') }}
|
key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.lock') }}
|
||||||
restore-keys: ${{ runner.os }}-composer-
|
restore-keys: ${{ runner.os }}-composer-
|
||||||
|
|
||||||
- name: Install Composer dependencies
|
- name: Install Composer dependencies
|
||||||
run: composer install --no-progress --prefer-dist --optimize-autoloader
|
|
||||||
|
|
||||||
- name: Prepare database
|
|
||||||
run: |
|
run: |
|
||||||
php bin/console doctrine:database:create --if-not-exists --no-interaction
|
composer require --dev symfony/orm-pack symfony/phpunit-bridge
|
||||||
php bin/console doctrine:schema:create --no-interaction
|
composer install --no-progress --prefer-dist --optimize-autoloader
|
||||||
php bin/console doctrine:fixtures:load --no-interaction
|
php bin/phpunit install
|
||||||
|
- name: Run Migration
|
||||||
|
run: |
|
||||||
|
php bin/console doctrine:schema:update --force || echo "No migrations found or schema update failed"
|
||||||
|
php bin/console doctrine:migrations:migrate || echo "No migrations found or migration failed"
|
||||||
env:
|
env:
|
||||||
DATABASE_URL: postgresql://postgres:postgres@127.0.0.1:${{ job.services.postgres.ports[5432] }}/postgres?serverVersion=16.0.0&charset=utf8
|
DATABASE_URL: postgres://postgres:postgres@127.0.0.1:${{ job.services.postgres.ports[5432] }}/postgres?charset=UTF-8
|
||||||
|
- name: Run Tests
|
||||||
- name: Run tests
|
|
||||||
run: php bin/phpunit --coverage-text
|
run: php bin/phpunit --coverage-text
|
||||||
env:
|
|
||||||
DATABASE_URL: postgresql://postgres:postgres@127.0.0.1:${{ job.services.postgres.ports[5432] }}/postgres?serverVersion=16.0.0&charset=utf8
|
|
||||||
|
|||||||
@@ -9,35 +9,31 @@ jobs:
|
|||||||
fail-fast: false
|
fail-fast: false
|
||||||
matrix:
|
matrix:
|
||||||
operating-system: [ubuntu-latest, windows-latest, macos-latest]
|
operating-system: [ubuntu-latest, windows-latest, macos-latest]
|
||||||
php-versions: ['8.4', '8.5', '8.6']
|
php-versions: ['7.3', '7.4']
|
||||||
steps:
|
steps:
|
||||||
- name: Checkout
|
- name: Checkout
|
||||||
uses: actions/checkout@v6
|
uses: actions/checkout@v2
|
||||||
|
- name: Setup PHP, with composer and extensions
|
||||||
# Docs: https://github.com/shivammathur/setup-php
|
uses: shivammathur/setup-php@v2 #https://github.com/shivammathur/setup-php
|
||||||
- name: Setup PHP
|
|
||||||
uses: shivammathur/setup-php@v2
|
|
||||||
with:
|
with:
|
||||||
php-version: ${{ matrix.php-versions }}
|
php-version: ${{ matrix.php-versions }}
|
||||||
extensions: mbstring, xml, ctype, iconv, intl, pdo_sqlite, zip
|
extensions: mbstring, xml, ctype, iconv, intl, pdo_sqlite
|
||||||
coverage: xdebug
|
coverage: xdebug #optional
|
||||||
|
|
||||||
- name: Get composer cache directory
|
- name: Get composer cache directory
|
||||||
id: composer-cache
|
id: composer-cache
|
||||||
shell: bash
|
run: echo "::set-output name=dir::$(composer config cache-files-dir)"
|
||||||
run: echo "dir=$(composer config cache-files-dir)" >> $GITHUB_OUTPUT
|
|
||||||
|
|
||||||
- name: Cache composer dependencies
|
- name: Cache composer dependencies
|
||||||
uses: actions/cache@v5
|
uses: actions/cache@v2
|
||||||
with:
|
with:
|
||||||
path: ${{ steps.composer-cache.outputs.dir }}
|
path: ${{ steps.composer-cache.outputs.dir }}
|
||||||
# Use composer.json for key, if composer.lock is not committed.
|
# Use composer.json for key, if composer.lock is not committed.
|
||||||
# key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.json') }}
|
# key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.json') }}
|
||||||
key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.lock') }}
|
key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.lock') }}
|
||||||
restore-keys: ${{ runner.os }}-composer-
|
restore-keys: ${{ runner.os }}-composer-
|
||||||
|
|
||||||
- name: Install Composer dependencies
|
- name: Install Composer dependencies
|
||||||
run: composer install --no-progress --prefer-dist --optimize-autoloader
|
run: |
|
||||||
|
composer require --dev symfony/phpunit-bridge
|
||||||
- name: Run tests
|
composer install --no-progress --prefer-dist --optimize-autoloader
|
||||||
run: ./bin/phpunit --coverage-text
|
php bin/phpunit install
|
||||||
|
- name: Run Tests
|
||||||
|
run: php bin/phpunit --coverage-text
|
||||||
|
|||||||
@@ -1,68 +0,0 @@
|
|||||||
# GitHub Action for WordPress plugins
|
|
||||||
# Tested with files scaffolded by wp scaffold plugin-tests --ci=github
|
|
||||||
# Requires phpunit/phpunit and yoast/phpunit-polyfills in require-dev for vendor/bin/phpunit
|
|
||||||
name: Testing WordPress
|
|
||||||
on: [push, pull_request]
|
|
||||||
jobs:
|
|
||||||
wordpress:
|
|
||||||
name: WordPress (PHP ${{ matrix.php-versions }})
|
|
||||||
runs-on: ubuntu-latest
|
|
||||||
strategy:
|
|
||||||
fail-fast: false
|
|
||||||
matrix:
|
|
||||||
php-versions: ['8.3', '8.4', '8.5']
|
|
||||||
|
|
||||||
# Docs: https://docs.github.com/en/actions/using-containerized-services
|
|
||||||
services:
|
|
||||||
mysql:
|
|
||||||
image: mysql:latest
|
|
||||||
env:
|
|
||||||
MYSQL_ALLOW_EMPTY_PASSWORD: false
|
|
||||||
MYSQL_ROOT_PASSWORD: root
|
|
||||||
MYSQL_DATABASE: wordpress_test
|
|
||||||
ports:
|
|
||||||
- 3306/tcp
|
|
||||||
options: --health-cmd="mysqladmin ping" --health-interval=10s --health-timeout=5s --health-retries=3
|
|
||||||
|
|
||||||
steps:
|
|
||||||
- name: Checkout
|
|
||||||
uses: actions/checkout@v6
|
|
||||||
|
|
||||||
# Docs: https://github.com/shivammathur/setup-php
|
|
||||||
- name: Setup PHP
|
|
||||||
uses: shivammathur/setup-php@v2
|
|
||||||
with:
|
|
||||||
php-version: ${{ matrix.php-versions }}
|
|
||||||
extensions: mbstring, xml, zip, intl, mysql
|
|
||||||
coverage: none
|
|
||||||
|
|
||||||
- name: Get composer cache directory
|
|
||||||
id: composer-cache
|
|
||||||
run: echo "dir=$(composer config cache-files-dir)" >> $GITHUB_OUTPUT
|
|
||||||
|
|
||||||
- name: Cache composer dependencies
|
|
||||||
uses: actions/cache@v5
|
|
||||||
with:
|
|
||||||
path: ${{ steps.composer-cache.outputs.dir }}
|
|
||||||
# Use composer.json for key, if composer.lock is not committed.
|
|
||||||
# key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.json') }}
|
|
||||||
key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.lock') }}
|
|
||||||
restore-keys: ${{ runner.os }}-composer-
|
|
||||||
|
|
||||||
- name: Install system dependencies
|
|
||||||
run: sudo apt-get update && sudo apt-get install -y subversion default-mysql-client
|
|
||||||
|
|
||||||
- name: Install Composer dependencies
|
|
||||||
run: |
|
|
||||||
if [ "${{ matrix.php-versions }}" = "8.3" ]; then
|
|
||||||
composer require --dev doctrine/instantiator:^2.0.0 --no-interaction --no-update
|
|
||||||
composer update doctrine/instantiator --with-all-dependencies --no-interaction --no-progress --prefer-dist --optimize-autoloader
|
|
||||||
else
|
|
||||||
composer install --no-interaction --no-progress --prefer-dist --optimize-autoloader
|
|
||||||
fi
|
|
||||||
|
|
||||||
- name: Install WordPress test environment
|
|
||||||
run: bash bin/install-wp-tests.sh wordpress_test root root 127.0.0.1:${{ job.services.mysql.ports['3306'] }} latest true
|
|
||||||
|
|
||||||
- name: Test with phpunit
|
|
||||||
run: vendor/bin/phpunit
|
|
||||||
73
examples/yii2-mysql.yml
Normal file
73
examples/yii2-mysql.yml
Normal file
@@ -0,0 +1,73 @@
|
|||||||
|
# GitHub Action for Yii Framework with MySQL
|
||||||
|
name: Testing Yii2 with MySQL
|
||||||
|
on: [push, pull_request]
|
||||||
|
jobs:
|
||||||
|
yii:
|
||||||
|
name: Yii2 (PHP ${{ matrix.php-versions }})
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
env:
|
||||||
|
DB_USERNAME: root
|
||||||
|
DB_PASSWORD: yii
|
||||||
|
TEST_DB_USERNAME: root
|
||||||
|
TEST_DB_PASSWORD: yii
|
||||||
|
DB_CHARSET: utf8
|
||||||
|
services:
|
||||||
|
mysql:
|
||||||
|
image: mysql:5.7
|
||||||
|
env:
|
||||||
|
MYSQL_ALLOW_EMPTY_PASSWORD: false
|
||||||
|
MYSQL_ROOT_PASSWORD: yii
|
||||||
|
MYSQL_DATABASE: yii
|
||||||
|
ports:
|
||||||
|
- 3306/tcp
|
||||||
|
options: --health-cmd="mysqladmin ping" --health-interval=10s --health-timeout=5s --health-retries=3
|
||||||
|
strategy:
|
||||||
|
fail-fast: false
|
||||||
|
matrix:
|
||||||
|
php-versions: ['7.2', '7.3', '7.4']
|
||||||
|
steps:
|
||||||
|
- name: Checkout
|
||||||
|
uses: actions/checkout@v2
|
||||||
|
- name: Set Node.js 10.x
|
||||||
|
uses: actions/setup-node@v1
|
||||||
|
with:
|
||||||
|
node-version: 10.x
|
||||||
|
- name: Setup PHP, with composer and extensions
|
||||||
|
uses: shivammathur/setup-php@v2 #https://github.com/shivammathur/setup-php
|
||||||
|
with:
|
||||||
|
php-version: ${{ matrix.php-versions }}
|
||||||
|
extensions: mbstring, intl, gd, imagick, zip, dom, mysql
|
||||||
|
coverage: xdebug #optional
|
||||||
|
- name: Start mysql service
|
||||||
|
run: sudo /etc/init.d/mysql start
|
||||||
|
- name: Get composer cache directory
|
||||||
|
id: composer-cache
|
||||||
|
run: echo "::set-output name=dir::$(composer config cache-files-dir)"
|
||||||
|
- name: Cache composer dependencies
|
||||||
|
uses: actions/cache@v2
|
||||||
|
with:
|
||||||
|
path: ${{ steps.composer-cache.outputs.dir }}
|
||||||
|
# Use composer.json for key, if composer.lock is not committed.
|
||||||
|
# key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.json') }}
|
||||||
|
key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.lock') }}
|
||||||
|
restore-keys: ${{ runner.os }}-composer-
|
||||||
|
- name: Install Composer dependencies
|
||||||
|
run: composer install --no-progress --prefer-dist --optimize-autoloader
|
||||||
|
- name: Prepare the application
|
||||||
|
run: |
|
||||||
|
php -r "file_exists('.env') || copy('.env.dist', '.env');"
|
||||||
|
php console/yii app/setup
|
||||||
|
npm install --development
|
||||||
|
npm run build
|
||||||
|
env:
|
||||||
|
DB_DSN: mysql:host=127.0.0.1;port=${{ job.services.mysql.ports['3306'] }};dbname=yii
|
||||||
|
TEST_DB_DSN: mysql:host=127.0.0.1;port=${{ job.services.mysql.ports['3306'] }};dbname=yii
|
||||||
|
- name: Run Tests
|
||||||
|
run: |
|
||||||
|
vendor/bin/codecept build
|
||||||
|
php tests/bin/yii app/setup --interactive=0
|
||||||
|
nohup php -S localhost:8080 > yii.log 2>&1 &
|
||||||
|
vendor/bin/codecept run
|
||||||
|
env:
|
||||||
|
DB_DSN: mysql:host=127.0.0.1;port=${{ job.services.mysql.ports['3306'] }};dbname=yii
|
||||||
|
TEST_DB_DSN: mysql:host=127.0.0.1;port=${{ job.services.mysql.ports['3306'] }};dbname=yii
|
||||||
71
examples/yii2-postgres.yml
Normal file
71
examples/yii2-postgres.yml
Normal file
@@ -0,0 +1,71 @@
|
|||||||
|
# GitHub Action for Yii Framework with PostgreSQL
|
||||||
|
name: Testing Yii2 with PostgreSQL
|
||||||
|
on: [push, pull_request]
|
||||||
|
jobs:
|
||||||
|
yii:
|
||||||
|
name: Yii2 (PHP ${{ matrix.php-versions }})
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
env:
|
||||||
|
DB_USERNAME: postgres
|
||||||
|
DB_PASSWORD: postgres
|
||||||
|
TEST_DB_USERNAME: postgres
|
||||||
|
TEST_DB_PASSWORD: postgres
|
||||||
|
DB_CHARSET: utf8
|
||||||
|
services:
|
||||||
|
postgres:
|
||||||
|
image: postgres:10.8
|
||||||
|
env:
|
||||||
|
POSTGRES_USER: postgres
|
||||||
|
POSTGRES_PASSWORD: postgres
|
||||||
|
POSTGRES_DB: postgres
|
||||||
|
ports:
|
||||||
|
- 5432/tcp
|
||||||
|
options: --health-cmd pg_isready --health-interval 10s --health-timeout 5s --health-retries 3
|
||||||
|
strategy:
|
||||||
|
fail-fast: false
|
||||||
|
matrix:
|
||||||
|
php-versions: ['7.2', '7.3', '7.4']
|
||||||
|
steps:
|
||||||
|
- name: Checkout
|
||||||
|
uses: actions/checkout@v2
|
||||||
|
- name: Set Node.js 10.x
|
||||||
|
uses: actions/setup-node@v1
|
||||||
|
with:
|
||||||
|
node-version: 10.x
|
||||||
|
- name: Setup PHP, with composer and extensions
|
||||||
|
uses: shivammathur/setup-php@v2 #https://github.com/shivammathur/setup-php
|
||||||
|
with:
|
||||||
|
php-version: ${{ matrix.php-versions }}
|
||||||
|
extensions: mbstring, intl, gd, imagick, zip, dom, pgsql
|
||||||
|
coverage: xdebug #optional
|
||||||
|
- name: Get composer cache directory
|
||||||
|
id: composer-cache
|
||||||
|
run: echo "::set-output name=dir::$(composer config cache-files-dir)"
|
||||||
|
- name: Cache composer dependencies
|
||||||
|
uses: actions/cache@v2
|
||||||
|
with:
|
||||||
|
path: ${{ steps.composer-cache.outputs.dir }}
|
||||||
|
# Use composer.json for key, if composer.lock is not committed.
|
||||||
|
# key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.json') }}
|
||||||
|
key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.lock') }}
|
||||||
|
restore-keys: ${{ runner.os }}-composer-
|
||||||
|
- name: Install Composer dependencies
|
||||||
|
run: composer install --no-progress --prefer-dist --optimize-autoloader
|
||||||
|
- name: Prepare the application
|
||||||
|
run: |
|
||||||
|
php -r "file_exists('.env') || copy('.env.dist', '.env');"
|
||||||
|
php console/yii app/setup
|
||||||
|
npm install --development
|
||||||
|
npm run build
|
||||||
|
env:
|
||||||
|
DB_DSN: pgsql:host=127.0.0.1;port=${{ job.services.postgres.ports['5432'] }};dbname=postgres
|
||||||
|
TEST_DB_DSN: pgsql:host=127.0.0.1;port=${{ job.services.postgres.ports['5432'] }};dbname=postgres
|
||||||
|
- name: Run Tests
|
||||||
|
run: |
|
||||||
|
vendor/bin/codecept build
|
||||||
|
php tests/bin/yii app/setup --interactive=0
|
||||||
|
nohup php -S localhost:8080 > yii.log 2>&1 &
|
||||||
|
vendor/bin/codecept run
|
||||||
|
env:
|
||||||
|
DB_DSN: pgsql:host=127.0.0.1;port=${{ job.services.postgres.ports['5432'] }};dbname=postgres
|
||||||
|
TEST_DB_DSN: pgsql:host=127.0.0.1;port=${{ job.services.postgres.ports['5432'] }};dbname=postgres
|
||||||
@@ -1,78 +0,0 @@
|
|||||||
# GitHub Action for Yii3 web application with MySQL
|
|
||||||
# Tested with https://github.com/yiisoft/app
|
|
||||||
name: Testing Yii3 with MySQL
|
|
||||||
on: [push, pull_request]
|
|
||||||
jobs:
|
|
||||||
yii:
|
|
||||||
name: Yii3 (PHP ${{ matrix.php-versions }})
|
|
||||||
runs-on: ubuntu-latest
|
|
||||||
env:
|
|
||||||
APP_C3: true
|
|
||||||
APP_ENV: test
|
|
||||||
APP_DEBUG: false
|
|
||||||
|
|
||||||
# Docs: https://docs.github.com/en/actions/using-containerized-services
|
|
||||||
services:
|
|
||||||
mysql:
|
|
||||||
image: mysql:8.4
|
|
||||||
env:
|
|
||||||
MYSQL_ALLOW_EMPTY_PASSWORD: false
|
|
||||||
MYSQL_ROOT_PASSWORD: password
|
|
||||||
MYSQL_DATABASE: app
|
|
||||||
ports:
|
|
||||||
- 3306/tcp
|
|
||||||
options: --health-cmd="mysqladmin ping" --health-interval=10s --health-timeout=5s --health-retries=3
|
|
||||||
strategy:
|
|
||||||
fail-fast: false
|
|
||||||
matrix:
|
|
||||||
php-versions: ['8.4', '8.5']
|
|
||||||
# The latest yiisoft/app release resolves Symfony 8.0 packages that require PHP 8.4+.
|
|
||||||
steps:
|
|
||||||
- name: Checkout
|
|
||||||
uses: actions/checkout@v6
|
|
||||||
|
|
||||||
# Docs: https://github.com/shivammathur/setup-php
|
|
||||||
- name: Setup PHP
|
|
||||||
uses: shivammathur/setup-php@v2
|
|
||||||
with:
|
|
||||||
php-version: ${{ matrix.php-versions }}
|
|
||||||
extensions: fileinfo, intl, pdo_mysql
|
|
||||||
ini-values: date.timezone='UTC', register_argc_argv=On
|
|
||||||
coverage: none
|
|
||||||
|
|
||||||
- name: Get composer cache directory
|
|
||||||
id: composer-cache
|
|
||||||
run: echo "dir=$(composer config cache-files-dir)" >> $GITHUB_OUTPUT
|
|
||||||
|
|
||||||
- name: Cache composer dependencies
|
|
||||||
uses: actions/cache@v5
|
|
||||||
with:
|
|
||||||
path: ${{ steps.composer-cache.outputs.dir }}
|
|
||||||
# Use composer.json for key, if composer.lock is not committed.
|
|
||||||
# key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.json') }}
|
|
||||||
key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.lock') }}
|
|
||||||
restore-keys: ${{ runner.os }}-composer-
|
|
||||||
|
|
||||||
- name: Install Composer dependencies
|
|
||||||
run: composer install --no-progress --prefer-dist --optimize-autoloader
|
|
||||||
|
|
||||||
- name: Run migrations
|
|
||||||
run: php yii migrate:up --no-interaction
|
|
||||||
env:
|
|
||||||
DB_HOST: 127.0.0.1
|
|
||||||
DB_PORT: ${{ job.services.mysql.ports['3306'] }}
|
|
||||||
DB_NAME: app
|
|
||||||
DB_USERNAME: root
|
|
||||||
DB_PASSWORD: password
|
|
||||||
|
|
||||||
- name: Run codeception build
|
|
||||||
run: vendor/bin/codecept build
|
|
||||||
|
|
||||||
- name: Run tests with Codeception
|
|
||||||
run: vendor/bin/codecept run
|
|
||||||
env:
|
|
||||||
DB_HOST: 127.0.0.1
|
|
||||||
DB_PORT: ${{ job.services.mysql.ports['3306'] }}
|
|
||||||
DB_NAME: app
|
|
||||||
DB_USERNAME: root
|
|
||||||
DB_PASSWORD: password
|
|
||||||
@@ -1,78 +0,0 @@
|
|||||||
# GitHub Action for Yii3 web application with PostgreSQL
|
|
||||||
# Tested with https://github.com/yiisoft/app
|
|
||||||
name: Testing Yii3 with PostgreSQL
|
|
||||||
on: [push, pull_request]
|
|
||||||
jobs:
|
|
||||||
yii:
|
|
||||||
name: Yii3 (PHP ${{ matrix.php-versions }})
|
|
||||||
runs-on: ubuntu-latest
|
|
||||||
env:
|
|
||||||
APP_C3: true
|
|
||||||
APP_ENV: test
|
|
||||||
APP_DEBUG: false
|
|
||||||
|
|
||||||
# Docs: https://docs.github.com/en/actions/using-containerized-services
|
|
||||||
services:
|
|
||||||
postgres:
|
|
||||||
image: postgres:16
|
|
||||||
env:
|
|
||||||
POSTGRES_USER: postgres
|
|
||||||
POSTGRES_PASSWORD: postgres
|
|
||||||
POSTGRES_DB: app
|
|
||||||
ports:
|
|
||||||
- 5432/tcp
|
|
||||||
options: --health-cmd pg_isready --health-interval 10s --health-timeout 5s --health-retries 3
|
|
||||||
strategy:
|
|
||||||
fail-fast: false
|
|
||||||
matrix:
|
|
||||||
php-versions: ['8.4', '8.5']
|
|
||||||
# The latest yiisoft/app release resolves Symfony 8.0 packages that require PHP 8.4+.
|
|
||||||
steps:
|
|
||||||
- name: Checkout
|
|
||||||
uses: actions/checkout@v6
|
|
||||||
|
|
||||||
# Docs: https://github.com/shivammathur/setup-php
|
|
||||||
- name: Setup PHP
|
|
||||||
uses: shivammathur/setup-php@v2
|
|
||||||
with:
|
|
||||||
php-version: ${{ matrix.php-versions }}
|
|
||||||
extensions: fileinfo, intl, pdo_pgsql
|
|
||||||
ini-values: date.timezone='UTC', register_argc_argv=On
|
|
||||||
coverage: none
|
|
||||||
|
|
||||||
- name: Get composer cache directory
|
|
||||||
id: composer-cache
|
|
||||||
run: echo "dir=$(composer config cache-files-dir)" >> $GITHUB_OUTPUT
|
|
||||||
|
|
||||||
- name: Cache composer dependencies
|
|
||||||
uses: actions/cache@v5
|
|
||||||
with:
|
|
||||||
path: ${{ steps.composer-cache.outputs.dir }}
|
|
||||||
# Use composer.json for key, if composer.lock is not committed.
|
|
||||||
# key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.json') }}
|
|
||||||
key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.lock') }}
|
|
||||||
restore-keys: ${{ runner.os }}-composer-
|
|
||||||
|
|
||||||
- name: Install Composer dependencies
|
|
||||||
run: composer install --no-progress --prefer-dist --optimize-autoloader
|
|
||||||
|
|
||||||
- name: Run migrations
|
|
||||||
run: php yii migrate:up --no-interaction
|
|
||||||
env:
|
|
||||||
DB_HOST: 127.0.0.1
|
|
||||||
DB_PORT: ${{ job.services.postgres.ports['5432'] }}
|
|
||||||
DB_NAME: app
|
|
||||||
DB_USERNAME: postgres
|
|
||||||
DB_PASSWORD: postgres
|
|
||||||
|
|
||||||
- name: Run codeception build
|
|
||||||
run: vendor/bin/codecept build
|
|
||||||
|
|
||||||
- name: Run tests with Codeception
|
|
||||||
run: vendor/bin/codecept run
|
|
||||||
env:
|
|
||||||
DB_HOST: 127.0.0.1
|
|
||||||
DB_PORT: ${{ job.services.postgres.ports['5432'] }}
|
|
||||||
DB_NAME: app
|
|
||||||
DB_USERNAME: postgres
|
|
||||||
DB_PASSWORD: postgres
|
|
||||||
@@ -1,53 +0,0 @@
|
|||||||
# GitHub Action for Yii3 web application
|
|
||||||
# Tested with https://github.com/yiisoft/app
|
|
||||||
name: Testing Yii3
|
|
||||||
on: [push, pull_request]
|
|
||||||
jobs:
|
|
||||||
yii:
|
|
||||||
name: Yii3 (PHP ${{ matrix.php-versions }} on ${{ matrix.operating-system }})
|
|
||||||
runs-on: ${{ matrix.operating-system }}
|
|
||||||
env:
|
|
||||||
APP_C3: true
|
|
||||||
APP_ENV: test
|
|
||||||
APP_DEBUG: false
|
|
||||||
strategy:
|
|
||||||
fail-fast: false
|
|
||||||
matrix:
|
|
||||||
operating-system: [ubuntu-latest, windows-latest]
|
|
||||||
php-versions: ['8.4', '8.5']
|
|
||||||
# The latest yiisoft/app release resolves Symfony 8.0 packages that require PHP 8.4+.
|
|
||||||
steps:
|
|
||||||
- name: Checkout
|
|
||||||
uses: actions/checkout@v6
|
|
||||||
|
|
||||||
# Docs: https://github.com/shivammathur/setup-php
|
|
||||||
- name: Setup PHP
|
|
||||||
uses: shivammathur/setup-php@v2
|
|
||||||
with:
|
|
||||||
php-version: ${{ matrix.php-versions }}
|
|
||||||
extensions: fileinfo, intl
|
|
||||||
ini-values: date.timezone='UTC', register_argc_argv=On
|
|
||||||
coverage: none
|
|
||||||
|
|
||||||
- name: Get composer cache directory
|
|
||||||
id: composer-cache
|
|
||||||
shell: bash
|
|
||||||
run: echo "dir=$(composer config cache-files-dir)" >> $GITHUB_OUTPUT
|
|
||||||
|
|
||||||
- name: Cache composer dependencies
|
|
||||||
uses: actions/cache@v5
|
|
||||||
with:
|
|
||||||
path: ${{ steps.composer-cache.outputs.dir }}
|
|
||||||
# Use composer.json for key, if composer.lock is not committed.
|
|
||||||
# key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.json') }}
|
|
||||||
key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.lock') }}
|
|
||||||
restore-keys: ${{ runner.os }}-composer-
|
|
||||||
|
|
||||||
- name: Install Composer dependencies
|
|
||||||
run: composer install --no-progress --prefer-dist --optimize-autoloader
|
|
||||||
|
|
||||||
- name: Run codeception build
|
|
||||||
run: vendor/bin/codecept build
|
|
||||||
|
|
||||||
- name: Run tests with Codeception
|
|
||||||
run: vendor/bin/codecept run
|
|
||||||
@@ -1,40 +1,36 @@
|
|||||||
# GitHub Action for Laminas framework MVC projects
|
# GitHub Action for Zend Framework
|
||||||
name: Testing Laminas MVC
|
name: Testing Zend Framework
|
||||||
on: [push, pull_request]
|
on: [push, pull_request]
|
||||||
jobs:
|
jobs:
|
||||||
build:
|
build:
|
||||||
strategy:
|
strategy:
|
||||||
matrix:
|
matrix:
|
||||||
operating-system: [ubuntu-latest, windows-latest, macos-latest]
|
operating-system: [ubuntu-latest, windows-latest, macos-latest]
|
||||||
php-versions: ['8.1', '8.2', '8.3']
|
php-versions: ['7.2', '7.3', '7.4']
|
||||||
runs-on: ${{ matrix.operating-system }}
|
runs-on: ${{ matrix.operating-system }}
|
||||||
steps:
|
steps:
|
||||||
- name: Checkout
|
- name: Checkout
|
||||||
uses: actions/checkout@v6
|
uses: actions/checkout@v2
|
||||||
|
- name: Setup PHP, with composer and extensions
|
||||||
# Docs: https://github.com/shivammathur/setup-php
|
uses: shivammathur/setup-php@v2 #https://github.com/shivammathur/setup-php
|
||||||
- name: Setup PHP
|
|
||||||
uses: shivammathur/setup-php@v2
|
|
||||||
with:
|
with:
|
||||||
php-version: ${{ matrix.php-versions }}
|
php-version: ${{ matrix.php-versions }}
|
||||||
coverage: xdebug
|
extensions: mbstring, bcmath, curl, intl
|
||||||
|
coverage: xdebug #optional
|
||||||
- name: Get composer cache directory
|
- name: Get composer cache directory
|
||||||
id: composer-cache
|
id: composer-cache
|
||||||
shell: bash
|
run: echo "::set-output name=dir::$(composer config cache-files-dir)"
|
||||||
run: echo "dir=$(composer config cache-files-dir)" >> $GITHUB_OUTPUT
|
|
||||||
|
|
||||||
- name: Cache composer dependencies
|
- name: Cache composer dependencies
|
||||||
uses: actions/cache@v5
|
uses: actions/cache@v2
|
||||||
with:
|
with:
|
||||||
path: ${{ steps.composer-cache.outputs.dir }}
|
path: ${{ steps.composer-cache.outputs.dir }}
|
||||||
# Use composer.json for key, if composer.lock is not committed.
|
# Use composer.json for key, if composer.lock is not committed.
|
||||||
# key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.json') }}
|
# key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.json') }}
|
||||||
key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.lock') }}
|
key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.lock') }}
|
||||||
restore-keys: ${{ runner.os }}-composer-
|
restore-keys: ${{ runner.os }}-composer-
|
||||||
|
|
||||||
- name: Install dependencies
|
- name: Install dependencies
|
||||||
run: composer install --no-progress --prefer-dist --optimize-autoloader
|
run: |
|
||||||
|
composer install --no-progress --prefer-dist --optimize-autoloader
|
||||||
|
composer require --dev phpunit/phpunit squizlabs/php_codesniffer zendframework/zend-test
|
||||||
- name: Test with phpunit
|
- name: Test with phpunit
|
||||||
run: vendor/bin/phpunit --coverage-text
|
run: vendor/bin/phpunit --coverage-text
|
||||||
15706
package-lock.json
generated
15706
package-lock.json
generated
File diff suppressed because it is too large
Load Diff
78
package.json
78
package.json
@@ -1,25 +1,15 @@
|
|||||||
{
|
{
|
||||||
"name": "setup-php",
|
"name": "setup-php",
|
||||||
"version": "2.37.1",
|
"version": "2.9.0",
|
||||||
"private": false,
|
"private": false,
|
||||||
"description": "Setup PHP for use with GitHub Actions",
|
"description": "Setup PHP for use with GitHub Actions",
|
||||||
"main": "lib/install.js",
|
"main": "dist/index.js",
|
||||||
"types": "lib/install.d.ts",
|
|
||||||
"directories": {
|
|
||||||
"lib": "lib",
|
|
||||||
"test": "__tests__",
|
|
||||||
"src": "src"
|
|
||||||
},
|
|
||||||
"files": [
|
|
||||||
"lib",
|
|
||||||
"src"
|
|
||||||
],
|
|
||||||
"scripts": {
|
"scripts": {
|
||||||
"build": "tsc",
|
"build": "tsc",
|
||||||
"lint": "eslint **/src/*.ts **/__tests__/*.ts --cache --fix",
|
"lint": "eslint **/*.ts --cache --fix",
|
||||||
"format": "prettier --write **/src/*.ts **/__tests__/*.ts && git add -f __tests__/ ",
|
"format": "prettier --write **/*.ts && git add .",
|
||||||
"format-check": "prettier --check **/src/*.ts **/__tests__/*.ts",
|
"format-check": "prettier --check **/*.ts",
|
||||||
"release": "ncc build -m -o dist && git add -f dist/",
|
"release": "ncc build src/install.ts -o dist && git add -f dist/",
|
||||||
"test": "jest"
|
"test": "jest"
|
||||||
},
|
},
|
||||||
"repository": {
|
"repository": {
|
||||||
@@ -34,41 +24,33 @@
|
|||||||
"author": "shivammathur",
|
"author": "shivammathur",
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@actions/exec": "^2.0.0",
|
"@actions/core": "^1.2.6",
|
||||||
"compare-versions": "^6.1.1"
|
"@actions/exec": "^1.0.4",
|
||||||
|
"@actions/io": "^1.0.2",
|
||||||
|
"fs": "0.0.1-security"
|
||||||
},
|
},
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"@eslint/compat": "^2.1.0",
|
"@types/jest": "^26.0.19",
|
||||||
"@eslint/js": "^10.0.1",
|
"@types/node": "^14.14.14",
|
||||||
"@types/jest": "^30.0.0",
|
"@typescript-eslint/eslint-plugin": "^4.10.0",
|
||||||
"@types/node": "^25.7.0",
|
"@typescript-eslint/parser": "^4.10.0",
|
||||||
"@typescript-eslint/eslint-plugin": "^8.59.3",
|
"@zeit/ncc": "^0.22.3",
|
||||||
"@typescript-eslint/parser": "^8.59.3",
|
"eslint": "^7.16.0",
|
||||||
"@vercel/ncc": "^0.38.4",
|
"eslint-config-prettier": "^7.1.0",
|
||||||
"eslint": "^10.3.0",
|
"eslint-plugin-import": "^2.22.1",
|
||||||
"eslint-config-prettier": "^10.1.8",
|
"eslint-plugin-jest": "^24.1.3",
|
||||||
"eslint-import-resolver-typescript": "^4.4.4",
|
"eslint-plugin-prettier": "^3.3.0",
|
||||||
"eslint-plugin-import-x": "^4.16.2",
|
"husky": "^4.3.6",
|
||||||
"eslint-plugin-jest": "^29.15.2",
|
"jest": "^26.6.3",
|
||||||
"eslint-plugin-prettier": "^5.5.5",
|
"jest-circus": "^26.6.3",
|
||||||
"globals": "^17.6.0",
|
"prettier": "^2.2.1",
|
||||||
"jest": "^30.4.2",
|
"ts-jest": "^26.4.4",
|
||||||
"jest-circus": "^30.4.2",
|
"typescript": "^4.1.3"
|
||||||
"nock": "^14.0.15",
|
|
||||||
"prettier": "^3.8.3",
|
|
||||||
"simple-git-hooks": "^2.13.1",
|
|
||||||
"ts-jest": "^29.4.9",
|
|
||||||
"typescript": "^5.9.3"
|
|
||||||
},
|
},
|
||||||
"overrides": {
|
"husky": {
|
||||||
"test-exclude": "^7.0.1",
|
"skipCI": true,
|
||||||
"glob": "^13.0.6",
|
"hooks": {
|
||||||
"minimatch": "^10.2.1"
|
|
||||||
},
|
|
||||||
"bugs": {
|
|
||||||
"url": "https://github.com/shivammathur/setup-php/issues"
|
|
||||||
},
|
|
||||||
"simple-git-hooks": {
|
|
||||||
"pre-commit": "npm run format && npm run lint && npm run test && npm run build && npm run release"
|
"pre-commit": "npm run format && npm run lint && npm run test && npm run build && npm run release"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|||||||
@@ -16,7 +16,7 @@ export async function addINIValuesUnix(
|
|||||||
});
|
});
|
||||||
return (
|
return (
|
||||||
'echo "' +
|
'echo "' +
|
||||||
ini_values.map(v => utils.escapeForShell(v, 'linux')).join('\n') +
|
ini_values.join('\n') +
|
||||||
'" | sudo tee -a "${pecl_file:-${ini_file[@]}}" >/dev/null 2>&1' +
|
'" | sudo tee -a "${pecl_file:-${ini_file[@]}}" >/dev/null 2>&1' +
|
||||||
script
|
script
|
||||||
);
|
);
|
||||||
@@ -37,10 +37,7 @@ export async function addINIValuesWindows(
|
|||||||
(await utils.addLog('$tick', line, 'Added to php.ini', 'win32')) + '\n';
|
(await utils.addLog('$tick', line, 'Added to php.ini', 'win32')) + '\n';
|
||||||
});
|
});
|
||||||
return (
|
return (
|
||||||
'Add-Content "$php_dir\\php.ini" "' +
|
'Add-Content "$php_dir\\php.ini" "' + ini_values.join('\n') + '"' + script
|
||||||
ini_values.map(v => utils.escapeForShell(v, 'win32')).join('\n') +
|
|
||||||
'"' +
|
|
||||||
script
|
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -48,28 +45,28 @@ export async function addINIValuesWindows(
|
|||||||
* Function to add custom ini values
|
* Function to add custom ini values
|
||||||
*
|
*
|
||||||
* @param ini_values_csv
|
* @param ini_values_csv
|
||||||
* @param os
|
* @param os_version
|
||||||
* @param no_step
|
* @param no_step
|
||||||
*/
|
*/
|
||||||
export async function addINIValues(
|
export async function addINIValues(
|
||||||
ini_values_csv: string,
|
ini_values_csv: string,
|
||||||
os: string,
|
os_version: string,
|
||||||
no_step = false
|
no_step = false
|
||||||
): Promise<string> {
|
): Promise<string> {
|
||||||
let script = '\n';
|
let script = '\n';
|
||||||
switch (no_step) {
|
switch (no_step) {
|
||||||
case true:
|
case true:
|
||||||
script +=
|
script +=
|
||||||
(await utils.stepLog('Add php.ini values', os)) +
|
(await utils.stepLog('Add php.ini values', os_version)) +
|
||||||
(await utils.suppressOutput(os)) +
|
(await utils.suppressOutput(os_version)) +
|
||||||
'\n';
|
'\n';
|
||||||
break;
|
break;
|
||||||
case false:
|
case false:
|
||||||
default:
|
default:
|
||||||
script += (await utils.stepLog('Add php.ini values', os)) + '\n';
|
script += (await utils.stepLog('Add php.ini values', os_version)) + '\n';
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
switch (os) {
|
switch (os_version) {
|
||||||
case 'win32':
|
case 'win32':
|
||||||
return script + (await addINIValuesWindows(ini_values_csv));
|
return script + (await addINIValuesWindows(ini_values_csv));
|
||||||
case 'darwin':
|
case 'darwin':
|
||||||
@@ -77,8 +74,8 @@ export async function addINIValues(
|
|||||||
return script + (await addINIValuesUnix(ini_values_csv));
|
return script + (await addINIValuesUnix(ini_values_csv));
|
||||||
default:
|
default:
|
||||||
return await utils.log(
|
return await utils.log(
|
||||||
'Platform ' + os + ' is not supported',
|
'Platform ' + os_version + ' is not supported',
|
||||||
os,
|
os_version,
|
||||||
'error'
|
'error'
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,65 +0,0 @@
|
|||||||
amqp=amqp
|
|
||||||
apcu=apcu
|
|
||||||
ast=ast
|
|
||||||
brotli=brotli
|
|
||||||
couchbase=couchbase
|
|
||||||
ds=ds
|
|
||||||
event=event
|
|
||||||
excimer=excimer
|
|
||||||
expect=expect
|
|
||||||
gearman=gearman
|
|
||||||
gmagick=gmagick
|
|
||||||
gnupg=gnupg
|
|
||||||
grpc=grpc
|
|
||||||
igbinary=igbinary
|
|
||||||
imagick=imagick
|
|
||||||
imap=imap
|
|
||||||
interbase=interbase
|
|
||||||
lua=lua
|
|
||||||
mailparse=mailparse
|
|
||||||
maxminddb=maxminddb
|
|
||||||
mcrypt=mcrypt
|
|
||||||
memcache=memcache
|
|
||||||
memcached=memcached
|
|
||||||
mongodb=mongodb
|
|
||||||
mongodb1=mongodb1
|
|
||||||
msgpack=msgpack
|
|
||||||
newrelic=newrelic
|
|
||||||
oauth=oauth
|
|
||||||
opentelemetry=opentelemetry
|
|
||||||
pcov=pcov
|
|
||||||
pdo_firebird=pdo_firebird
|
|
||||||
pdo_sqlsrv=pdo_sqlsrv
|
|
||||||
pecl_http=http
|
|
||||||
phalcon3=phalcon
|
|
||||||
phalcon4=phalcon
|
|
||||||
phalcon5=phalcon
|
|
||||||
pinba=pinba
|
|
||||||
propro=propro
|
|
||||||
protobuf=protobuf
|
|
||||||
psr=psr
|
|
||||||
raphf=raphf
|
|
||||||
rdkafka=rdkafka
|
|
||||||
phpredis=redis
|
|
||||||
redis=redis
|
|
||||||
seaslog=seaslog
|
|
||||||
scalar_objects=scalar_objects
|
|
||||||
snmp=snmp
|
|
||||||
sqlsrv=sqlsrv
|
|
||||||
spx=spx
|
|
||||||
ssh2=ssh2
|
|
||||||
swoole=swoole
|
|
||||||
swow=swow
|
|
||||||
uopz=uopz
|
|
||||||
uploadprogress=uploadprogress
|
|
||||||
uuid=uuid
|
|
||||||
v8js=v8js
|
|
||||||
vips=vips
|
|
||||||
vld=vld
|
|
||||||
xdebug=xdebug
|
|
||||||
xdebug2=xdebug
|
|
||||||
xhprof=xhprof
|
|
||||||
xlswriter=xlswriter
|
|
||||||
yaml=yaml
|
|
||||||
zmq=zmq
|
|
||||||
zstd=zstd
|
|
||||||
@@ -1,3 +0,0 @@
|
|||||||
1.0.0-0 1.10.28
|
|
||||||
2.0.0-0 2.2.28
|
|
||||||
2.3.0-0 2.9.8
|
|
||||||
@@ -1 +0,0 @@
|
|||||||
Composer %s has a known GitHub token parsing bug that exposes GitHub tokens in the error output. So, GitHub authentication has not been configured for this Composer version. Please update to the latest version of Composer. See: https://github.com/composer/composer/security/advisories/GHSA-f9f8-rm49-7jv2
|
|
||||||
@@ -1,3 +0,0 @@
|
|||||||
COMPOSER_PROCESS_TIMEOUT=0
|
|
||||||
COMPOSER_NO_INTERACTION=1
|
|
||||||
COMPOSER_NO_AUDIT=1
|
|
||||||
@@ -1,22 +0,0 @@
|
|||||||
amqp=rabbitmq-c
|
|
||||||
decimal=mpdecimal
|
|
||||||
ev=libev
|
|
||||||
event=libevent
|
|
||||||
geoip=geoip
|
|
||||||
gmagick=graphicsmagick
|
|
||||||
gnupg=gpgme
|
|
||||||
grpc=grpc protobuf
|
|
||||||
imagick=imagemagick
|
|
||||||
memcached=libmemcached libevent
|
|
||||||
protobuf=protobuf
|
|
||||||
rdkafka=librdkafka
|
|
||||||
snappy=snappy
|
|
||||||
sodium=libsodium
|
|
||||||
ssh2=libssh2
|
|
||||||
uv=libuv
|
|
||||||
uuid=util-linux
|
|
||||||
vips=vips
|
|
||||||
yaz=yaz
|
|
||||||
yaml=libyaml
|
|
||||||
zstd=zstd
|
|
||||||
zmq=zeromq
|
|
||||||
@@ -1,3 +0,0 @@
|
|||||||
opcache.enable=1
|
|
||||||
opcache.jit_buffer_size=256M
|
|
||||||
opcache.jit=1235
|
|
||||||
@@ -1,3 +0,0 @@
|
|||||||
opcache.enable=1
|
|
||||||
opcache.jit_buffer_size=128M
|
|
||||||
opcache.jit=1235
|
|
||||||
@@ -1,2 +0,0 @@
|
|||||||
date.timezone=UTC
|
|
||||||
memory_limit=-1
|
|
||||||
@@ -1 +0,0 @@
|
|||||||
xdebug.mode=coverage
|
|
||||||
@@ -1,22 +0,0 @@
|
|||||||
amqp=librabbitmq-dev
|
|
||||||
decimal=libmpdec-dev
|
|
||||||
ev=libev-dev
|
|
||||||
event=libevent-dev
|
|
||||||
geoip=libgeoip-dev
|
|
||||||
gmagick=graphicsmagick-libmagick-dev-compat
|
|
||||||
gnupg=libgpgme-dev
|
|
||||||
grpc=libgrpc-dev libprotobuf-dev protobuf-compiler
|
|
||||||
imagick=libmagickwand-dev libmagickcore-dev
|
|
||||||
memcached=libmemcached-dev libevent-dev
|
|
||||||
protobuf=libprotobuf-dev protobuf-compiler
|
|
||||||
rdkafka=librdkafka-dev
|
|
||||||
snappy=libsnappy-dev
|
|
||||||
sodium=libsodium-dev
|
|
||||||
ssh2=libssh2-1-dev
|
|
||||||
uv=libuv1-dev
|
|
||||||
uuid=uuid-dev
|
|
||||||
vips=libvips-dev
|
|
||||||
yaz=libyaz-dev
|
|
||||||
yaml=libyaml-dev
|
|
||||||
zstd=libzstd-dev
|
|
||||||
zmq=libzmq3-dev
|
|
||||||
@@ -1,31 +0,0 @@
|
|||||||
apc=25
|
|
||||||
apcu_bc=25
|
|
||||||
apcu-bc=25
|
|
||||||
blackfire=30
|
|
||||||
couchbase=30
|
|
||||||
decimal=30
|
|
||||||
ds=30
|
|
||||||
event=30
|
|
||||||
ev=30
|
|
||||||
grpc=30
|
|
||||||
http=25
|
|
||||||
pecl_http=25
|
|
||||||
pecl-http=25
|
|
||||||
inotify=30
|
|
||||||
libvirt-php=40
|
|
||||||
mailparse=25
|
|
||||||
maxminddb=30
|
|
||||||
memcached=25
|
|
||||||
mysqlnd=10
|
|
||||||
mysqlnd_ms=30
|
|
||||||
opcache=10
|
|
||||||
openswoole=25
|
|
||||||
pdo=10
|
|
||||||
phalcon=35
|
|
||||||
protobuf=30
|
|
||||||
psr=15
|
|
||||||
rdkafka=30
|
|
||||||
swoole=25
|
|
||||||
vips=30
|
|
||||||
xml=15
|
|
||||||
zstd=30
|
|
||||||
@@ -1,27 +0,0 @@
|
|||||||
8,jessie
|
|
||||||
9,stretch
|
|
||||||
10,buster
|
|
||||||
11,bullseye
|
|
||||||
12,bookworm
|
|
||||||
13,trixie
|
|
||||||
16.04 LTS,xenial
|
|
||||||
16.10,yakkety
|
|
||||||
17.04,zesty
|
|
||||||
17.10,artful
|
|
||||||
18.04 LTS,bionic
|
|
||||||
18.10,cosmic
|
|
||||||
19.04,disco
|
|
||||||
19.10,eoan
|
|
||||||
20.04 LTS,focal
|
|
||||||
20.10,groovy
|
|
||||||
21.04,hirsute
|
|
||||||
21.10,impish
|
|
||||||
22.04,jammy
|
|
||||||
23.04,lunar
|
|
||||||
23.10,mantic
|
|
||||||
24.04,noble
|
|
||||||
24.10,oracular
|
|
||||||
25.05,plucky
|
|
||||||
25.10,questing
|
|
||||||
26.04,resolute
|
|
||||||
26.10,stonking
|
|
||||||
|
@@ -1,10 +1,6 @@
|
|||||||
{
|
{
|
||||||
"lowest": "8.1",
|
"latest": "8.0",
|
||||||
"highest": "8.5",
|
|
||||||
"latest": "8.5",
|
|
||||||
"nightly": "8.6",
|
|
||||||
"master": "8.6",
|
|
||||||
"5.x": "5.6",
|
"5.x": "5.6",
|
||||||
"7.x": "7.4",
|
"7.x": "7.4",
|
||||||
"8.x": "8.5"
|
"8.x": "8.0"
|
||||||
}
|
}
|
||||||
@@ -1,11 +0,0 @@
|
|||||||
cgi
|
|
||||||
cli
|
|
||||||
curl
|
|
||||||
fpm
|
|
||||||
intl
|
|
||||||
mbstring
|
|
||||||
mysql
|
|
||||||
opcache
|
|
||||||
pgsql
|
|
||||||
xml
|
|
||||||
zip
|
|
||||||
@@ -1,12 +0,0 @@
|
|||||||
cgi
|
|
||||||
cli
|
|
||||||
curl
|
|
||||||
dev
|
|
||||||
fpm
|
|
||||||
intl
|
|
||||||
mbstring
|
|
||||||
mysql
|
|
||||||
opcache
|
|
||||||
pgsql
|
|
||||||
xml
|
|
||||||
zip
|
|
||||||
@@ -1,358 +0,0 @@
|
|||||||
{
|
|
||||||
"backward-compatibility-check": {
|
|
||||||
"type": "composer",
|
|
||||||
"repository": "roave/backward-compatibility-check",
|
|
||||||
"scope": "scoped"
|
|
||||||
},
|
|
||||||
"box": {
|
|
||||||
"type": "phar",
|
|
||||||
"repository": "box-project/box",
|
|
||||||
"packagist": "humbug/box",
|
|
||||||
"extension": ".phar",
|
|
||||||
"domain": "https://github.com",
|
|
||||||
"version_prefix": "",
|
|
||||||
"version_parameter": "--version"
|
|
||||||
},
|
|
||||||
"churn": {
|
|
||||||
"type": "phar",
|
|
||||||
"repository": "bmitch/churn-php",
|
|
||||||
"extension": ".phar",
|
|
||||||
"domain": "https://github.com",
|
|
||||||
"version_prefix": "",
|
|
||||||
"version_parameter": "-V"
|
|
||||||
},
|
|
||||||
"composer-dependency-analyser": {
|
|
||||||
"type": "composer",
|
|
||||||
"repository": "shipmonk/composer-dependency-analyser",
|
|
||||||
"scope": "scoped"
|
|
||||||
},
|
|
||||||
"composer-unused": {
|
|
||||||
"type": "phar",
|
|
||||||
"repository": "composer-unused/composer-unused",
|
|
||||||
"extension": ".phar",
|
|
||||||
"domain": "https://github.com",
|
|
||||||
"version_prefix": "",
|
|
||||||
"version_parameter": "-V"
|
|
||||||
},
|
|
||||||
"composer-normalize": {
|
|
||||||
"type": "phar",
|
|
||||||
"repository": "ergebnis/composer-normalize",
|
|
||||||
"extension": ".phar",
|
|
||||||
"domain": "https://github.com",
|
|
||||||
"version_prefix": "",
|
|
||||||
"version_parameter": "diagnose"
|
|
||||||
},
|
|
||||||
"cs2pr": {
|
|
||||||
"type": "phar",
|
|
||||||
"repository": "staabm/annotate-pull-request-from-checkstyle",
|
|
||||||
"extension": "",
|
|
||||||
"domain": "https://github.com",
|
|
||||||
"version_prefix": "",
|
|
||||||
"version_parameter": "-V"
|
|
||||||
},
|
|
||||||
"easy-coding-standard": {
|
|
||||||
"type": "composer",
|
|
||||||
"alias": "ecs",
|
|
||||||
"repository": "symplify/easy-coding-standard",
|
|
||||||
"scope": "scoped"
|
|
||||||
},
|
|
||||||
"infection": {
|
|
||||||
"type": "phar",
|
|
||||||
"repository": "infection/infection",
|
|
||||||
"extension": ".phar",
|
|
||||||
"domain": "https://github.com",
|
|
||||||
"version_prefix": "",
|
|
||||||
"version_parameter": "-V"
|
|
||||||
},
|
|
||||||
"name-collision-detector": {
|
|
||||||
"type": "composer",
|
|
||||||
"repository": "shipmonk/name-collision-detector",
|
|
||||||
"scope": "scoped"
|
|
||||||
},
|
|
||||||
"phan": {
|
|
||||||
"type": "phar",
|
|
||||||
"repository": "phan/phan",
|
|
||||||
"extension": ".phar",
|
|
||||||
"domain": "https://github.com",
|
|
||||||
"version_prefix": "",
|
|
||||||
"version_parameter": "-v"
|
|
||||||
},
|
|
||||||
"parallel-lint": {
|
|
||||||
"type": "phar",
|
|
||||||
"repository": "php-parallel-lint/PHP-Parallel-Lint",
|
|
||||||
"extension": ".phar",
|
|
||||||
"domain": "https://github.com",
|
|
||||||
"version_prefix": "v",
|
|
||||||
"version_parameter": "--version"
|
|
||||||
},
|
|
||||||
"php-cs-fixer": {
|
|
||||||
"type": "phar",
|
|
||||||
"repository": "PHP-CS-Fixer/PHP-CS-Fixer",
|
|
||||||
"extension": ".phar",
|
|
||||||
"domain": "https://github.com",
|
|
||||||
"fetch_latest": "true",
|
|
||||||
"version_prefix": "v",
|
|
||||||
"version_parameter": "-V"
|
|
||||||
},
|
|
||||||
"php-scoper": {
|
|
||||||
"type": "phar",
|
|
||||||
"repository": "humbug/php-scoper",
|
|
||||||
"packagist": "humbug/php-scoper",
|
|
||||||
"extension": ".phar",
|
|
||||||
"domain": "https://github.com",
|
|
||||||
"version_prefix": "",
|
|
||||||
"version_parameter": "--version"
|
|
||||||
},
|
|
||||||
"phpcbf": {
|
|
||||||
"type": "phar",
|
|
||||||
"repository": "PHPCSStandards/PHP_CodeSniffer",
|
|
||||||
"extension": ".phar",
|
|
||||||
"domain": "https://github.com",
|
|
||||||
"version_prefix": "",
|
|
||||||
"version_parameter": "--version"
|
|
||||||
},
|
|
||||||
"phpcs": {
|
|
||||||
"type": "phar",
|
|
||||||
"repository": "PHPCSStandards/PHP_CodeSniffer",
|
|
||||||
"extension": ".phar",
|
|
||||||
"domain": "https://github.com",
|
|
||||||
"version_prefix": "",
|
|
||||||
"version_parameter": "--version"
|
|
||||||
},
|
|
||||||
"phpDocumentor": {
|
|
||||||
"type": "phar",
|
|
||||||
"repository": "phpDocumentor/phpDocumentor",
|
|
||||||
"extension": ".phar",
|
|
||||||
"domain": "https://github.com",
|
|
||||||
"alias": "phpdoc",
|
|
||||||
"version_prefix": "v",
|
|
||||||
"version_parameter": "--version"
|
|
||||||
},
|
|
||||||
"phpmd": {
|
|
||||||
"type": "phar",
|
|
||||||
"repository": "phpmd/phpmd",
|
|
||||||
"extension": ".phar",
|
|
||||||
"domain": "https://github.com",
|
|
||||||
"version_prefix": "",
|
|
||||||
"version_parameter": "--version"
|
|
||||||
},
|
|
||||||
"phpspec": {
|
|
||||||
"type": "phar",
|
|
||||||
"repository": "phpspec/phpspec",
|
|
||||||
"extension": ".phar",
|
|
||||||
"domain": "https://github.com",
|
|
||||||
"version_prefix": "",
|
|
||||||
"version_parameter": "-V"
|
|
||||||
},
|
|
||||||
"phpstan": {
|
|
||||||
"type": "phar",
|
|
||||||
"repository": "phpstan/phpstan",
|
|
||||||
"extension": ".phar",
|
|
||||||
"domain": "https://github.com",
|
|
||||||
"version_prefix": "",
|
|
||||||
"version_parameter": "-V"
|
|
||||||
},
|
|
||||||
"pie": {
|
|
||||||
"type": "phar",
|
|
||||||
"repository": "php/pie",
|
|
||||||
"extension": ".phar",
|
|
||||||
"domain": "https://github.com",
|
|
||||||
"version_prefix": "",
|
|
||||||
"version_parameter": "-V"
|
|
||||||
},
|
|
||||||
"pint": {
|
|
||||||
"type": "phar",
|
|
||||||
"repository": "laravel/pint",
|
|
||||||
"extension": ".phar",
|
|
||||||
"domain": "https://github.com",
|
|
||||||
"version_prefix": "v",
|
|
||||||
"version_parameter": "-V"
|
|
||||||
},
|
|
||||||
"psalm": {
|
|
||||||
"type": "phar",
|
|
||||||
"repository": "vimeo/psalm",
|
|
||||||
"extension": ".phar",
|
|
||||||
"domain": "https://github.com",
|
|
||||||
"version_prefix": "",
|
|
||||||
"version_parameter": "-v"
|
|
||||||
},
|
|
||||||
"behat": {
|
|
||||||
"type": "composer",
|
|
||||||
"repository": "behat/behat",
|
|
||||||
"scope": "scoped"
|
|
||||||
},
|
|
||||||
"codeception": {
|
|
||||||
"type": "composer",
|
|
||||||
"repository": "codeception/codeception",
|
|
||||||
"scope": "scoped"
|
|
||||||
},
|
|
||||||
"automatic-composer-prefetcher": {
|
|
||||||
"type": "composer",
|
|
||||||
"alias": "composer-prefetcher",
|
|
||||||
"repository": "narrowspark/automatic-composer-prefetcher",
|
|
||||||
"scope": "global"
|
|
||||||
},
|
|
||||||
"composer-require-checker": {
|
|
||||||
"type": "composer",
|
|
||||||
"repository": "maglnet/composer-require-checker",
|
|
||||||
"scope": "scoped"
|
|
||||||
},
|
|
||||||
"flex": {
|
|
||||||
"type": "composer",
|
|
||||||
"repository": "symfony/flex",
|
|
||||||
"scope": "global"
|
|
||||||
},
|
|
||||||
"phinx": {
|
|
||||||
"type": "composer",
|
|
||||||
"repository": "robmorgan/phinx",
|
|
||||||
"scope": "scoped"
|
|
||||||
},
|
|
||||||
"phplint": {
|
|
||||||
"type": "composer",
|
|
||||||
"repository": "overtrue/phplint",
|
|
||||||
"scope": "scoped"
|
|
||||||
},
|
|
||||||
"phpunit-bridge": {
|
|
||||||
"alias": "simple-phpunit",
|
|
||||||
"type": "composer",
|
|
||||||
"repository": "symfony/phpunit-bridge",
|
|
||||||
"scope": "global"
|
|
||||||
},
|
|
||||||
"phpunit-polyfills": {
|
|
||||||
"type": "composer",
|
|
||||||
"repository": "yoast/phpunit-polyfills",
|
|
||||||
"scope": "global"
|
|
||||||
},
|
|
||||||
"prestissimo": {
|
|
||||||
"type": "composer",
|
|
||||||
"repository": "hirak/prestissimo",
|
|
||||||
"scope": "global"
|
|
||||||
},
|
|
||||||
"vapor-cli": {
|
|
||||||
"type": "composer",
|
|
||||||
"alias": "vapor",
|
|
||||||
"repository": "laravel/vapor-cli",
|
|
||||||
"scope": "scoped"
|
|
||||||
},
|
|
||||||
"rector": {
|
|
||||||
"type": "composer",
|
|
||||||
"repository": "rector/rector",
|
|
||||||
"scope": "scoped"
|
|
||||||
},
|
|
||||||
"blackfire": {
|
|
||||||
"type": "custom-package",
|
|
||||||
"alias": "blackfire-agent"
|
|
||||||
},
|
|
||||||
"grpc_php_plugin": {
|
|
||||||
"type": "custom-package",
|
|
||||||
"repository": "grpc/grpc",
|
|
||||||
"domain": "https://github.com",
|
|
||||||
"version_prefix": "v"
|
|
||||||
},
|
|
||||||
"mago": {
|
|
||||||
"type": "custom-package",
|
|
||||||
"repository": "carthage-software/mago",
|
|
||||||
"domain": "https://github.com",
|
|
||||||
"version_prefix": ""
|
|
||||||
},
|
|
||||||
"protoc": {
|
|
||||||
"type": "custom-package",
|
|
||||||
"repository": "protocolbuffers/protobuf",
|
|
||||||
"domain": "https://github.com",
|
|
||||||
"version_prefix": "v"
|
|
||||||
},
|
|
||||||
"symfony-cli": {
|
|
||||||
"alias": "symfony",
|
|
||||||
"type": "custom-package",
|
|
||||||
"repository": "symfony-cli/symfony-cli",
|
|
||||||
"domain": "https://github.com",
|
|
||||||
"version_prefix": "v",
|
|
||||||
"version_parameter": "-V"
|
|
||||||
},
|
|
||||||
"blackfire-player": {
|
|
||||||
"type": "custom-function",
|
|
||||||
"domain": "https://get.blackfire.io",
|
|
||||||
"function": "blackfire_player",
|
|
||||||
"version_prefix": "v",
|
|
||||||
"version_parameter": "-V"
|
|
||||||
},
|
|
||||||
"castor": {
|
|
||||||
"type": "custom-function",
|
|
||||||
"domain": "https://github.com",
|
|
||||||
"repository": "jolicode/castor",
|
|
||||||
"function": "castor",
|
|
||||||
"version_prefix": "v",
|
|
||||||
"version_parameter": "-V"
|
|
||||||
},
|
|
||||||
"composer": {
|
|
||||||
"type": "custom-function",
|
|
||||||
"domain": "https://getcomposer.org",
|
|
||||||
"repository": "composer/composer",
|
|
||||||
"function": "composer"
|
|
||||||
},
|
|
||||||
"deployer": {
|
|
||||||
"type": "custom-function",
|
|
||||||
"domain": "https://deployer.org",
|
|
||||||
"repository": "deployphp/deployer",
|
|
||||||
"function": "deployer",
|
|
||||||
"version_prefix": "v",
|
|
||||||
"version_parameter": "-V"
|
|
||||||
},
|
|
||||||
"pecl": {
|
|
||||||
"type": "custom-function",
|
|
||||||
"function": "pecl"
|
|
||||||
},
|
|
||||||
"phing": {
|
|
||||||
"type": "custom-function",
|
|
||||||
"domain": "https://www.phing.info",
|
|
||||||
"repository": "phingofficial/phing",
|
|
||||||
"function": "phing",
|
|
||||||
"extension": ".phar",
|
|
||||||
"version_prefix": "",
|
|
||||||
"version_parameter": "-v"
|
|
||||||
},
|
|
||||||
"phive": {
|
|
||||||
"type": "custom-function",
|
|
||||||
"repository": "phar-io/phive",
|
|
||||||
"domain": "https://github.com",
|
|
||||||
"function": "phive",
|
|
||||||
"version_prefix": "",
|
|
||||||
"version_parameter": "status"
|
|
||||||
},
|
|
||||||
"phpcpd": {
|
|
||||||
"type": "custom-function",
|
|
||||||
"repository": "sebastianbergmann/phpcpd",
|
|
||||||
"domain": "https://phar.phpunit.de",
|
|
||||||
"function": "phpcpd",
|
|
||||||
"version_prefix": "",
|
|
||||||
"version_parameter": "--version"
|
|
||||||
},
|
|
||||||
"phpunit": {
|
|
||||||
"type": "custom-function",
|
|
||||||
"repository": "sebastianbergmann/phpunit",
|
|
||||||
"packagist": "phpunit/phpunit",
|
|
||||||
"domain": "https://phar.phpunit.de",
|
|
||||||
"function": "phpunit",
|
|
||||||
"version_prefix": "",
|
|
||||||
"version_parameter": "--version"
|
|
||||||
},
|
|
||||||
"phpize": {
|
|
||||||
"type": "custom-function",
|
|
||||||
"function": "dev_tools",
|
|
||||||
"alias": "php-config"
|
|
||||||
},
|
|
||||||
"php-config": {
|
|
||||||
"type": "custom-function",
|
|
||||||
"function": "dev_tools"
|
|
||||||
},
|
|
||||||
"wp-cli": {
|
|
||||||
"type": "custom-function",
|
|
||||||
"function": "wp_cli",
|
|
||||||
"repository": "wp-cli/wp-cli",
|
|
||||||
"domain": "https://github.com",
|
|
||||||
"alias": "wp",
|
|
||||||
"extension": ".phar",
|
|
||||||
"version_parameter": "--version",
|
|
||||||
"version_prefix": "v"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,136 +0,0 @@
|
|||||||
{
|
|
||||||
"$schema": "http://json-schema.org/draft-07/schema#",
|
|
||||||
"$id": "https://raw.githubusercontent.com/shivammathur/setup-php/develop/src/configs/tools_schema.json",
|
|
||||||
"type": "object",
|
|
||||||
"title": "Tools",
|
|
||||||
"default": {},
|
|
||||||
"examples": [
|
|
||||||
{
|
|
||||||
"tool": {
|
|
||||||
"alias": "tool_alias",
|
|
||||||
"domain": "https://example.com",
|
|
||||||
"extension": ".ext",
|
|
||||||
"fetch_latest": "true",
|
|
||||||
"function": "function_name",
|
|
||||||
"repository": "user/tool",
|
|
||||||
"packagist": "user/tool",
|
|
||||||
"scope": "global, scoped",
|
|
||||||
"type": "phar, composer, custom-package or custom-function",
|
|
||||||
"version_parameter": "--version",
|
|
||||||
"version_prefix": "v"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"items": {
|
|
||||||
"properties": {
|
|
||||||
"alias": {
|
|
||||||
"$id": "#/items/properties/alias",
|
|
||||||
"type": "string",
|
|
||||||
"title": "The alias schema",
|
|
||||||
"description": "Alias for a tool.",
|
|
||||||
"examples": [
|
|
||||||
"tool_alias"
|
|
||||||
]
|
|
||||||
},
|
|
||||||
"domain": {
|
|
||||||
"$id": "#/items/properties/domain",
|
|
||||||
"type": "string",
|
|
||||||
"title": "The domain schema",
|
|
||||||
"description": "Domain URL of the tool.",
|
|
||||||
"examples": [
|
|
||||||
"https://example.com"
|
|
||||||
]
|
|
||||||
},
|
|
||||||
"extension": {
|
|
||||||
"$id": "#/items/properties/extension",
|
|
||||||
"type": "string",
|
|
||||||
"title": "The extension schema",
|
|
||||||
"description": "File extension of the tool.",
|
|
||||||
"examples": [
|
|
||||||
".ext"
|
|
||||||
]
|
|
||||||
},
|
|
||||||
"fetch_latest": {
|
|
||||||
"$id": "#/items/properties/fetch_latest",
|
|
||||||
"type": "string",
|
|
||||||
"title": "The fetch_latest schema",
|
|
||||||
"description": "Fetch the latest version from GitHub releases.",
|
|
||||||
"enum": [
|
|
||||||
"true",
|
|
||||||
"false"
|
|
||||||
]
|
|
||||||
},
|
|
||||||
"function": {
|
|
||||||
"$id": "#/items/properties/function",
|
|
||||||
"type": "string",
|
|
||||||
"title": "The function schema",
|
|
||||||
"description": "Function name in tools.ts which returns the script to setup the tool.",
|
|
||||||
"examples": [
|
|
||||||
"function_name"
|
|
||||||
]
|
|
||||||
},
|
|
||||||
"repository": {
|
|
||||||
"$id": "#/items/properties/repository",
|
|
||||||
"type": "string",
|
|
||||||
"title": "The repository schema",
|
|
||||||
"description": "GitHub repository of the tool.",
|
|
||||||
"examples": [
|
|
||||||
"user/tool"
|
|
||||||
]
|
|
||||||
},
|
|
||||||
"packagist": {
|
|
||||||
"$id": "#/items/properties/packagist",
|
|
||||||
"type": "string",
|
|
||||||
"title": "The repository schema",
|
|
||||||
"description": "Packagist repository of the tool in case different from repository.",
|
|
||||||
"examples": [
|
|
||||||
"user/tool"
|
|
||||||
]
|
|
||||||
},
|
|
||||||
"scope": {
|
|
||||||
"$id": "#/items/properties/scope",
|
|
||||||
"type": "string",
|
|
||||||
"title": "The scope schema",
|
|
||||||
"description": "Scope of tool installation: global or scoped",
|
|
||||||
"enum": [
|
|
||||||
"global",
|
|
||||||
"scoped"
|
|
||||||
]
|
|
||||||
},
|
|
||||||
"type": {
|
|
||||||
"$id": "#/items/properties/type",
|
|
||||||
"type": "string",
|
|
||||||
"title": "The type schema",
|
|
||||||
"description": "Type of tool: phar, composer, custom-package or custom-function.",
|
|
||||||
"enum": [
|
|
||||||
"phar",
|
|
||||||
"composer",
|
|
||||||
"custom-package",
|
|
||||||
"custom-function"
|
|
||||||
]
|
|
||||||
},
|
|
||||||
"version_parameter": {
|
|
||||||
"$id": "#/items/properties/version_parameter",
|
|
||||||
"type": "string",
|
|
||||||
"title": "The version_parameter schema",
|
|
||||||
"description": "Parameter to get the tool version.",
|
|
||||||
"examples": [
|
|
||||||
"--version"
|
|
||||||
]
|
|
||||||
},
|
|
||||||
"version_prefix": {
|
|
||||||
"$id": "#/items/properties/version_prefix",
|
|
||||||
"type": "string",
|
|
||||||
"title": "The version_prefix schema",
|
|
||||||
"description": "Prefix of the version in the download URL.",
|
|
||||||
"examples": [
|
|
||||||
"v"
|
|
||||||
]
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"required": [
|
|
||||||
"type"
|
|
||||||
],
|
|
||||||
"additionalProperties": true
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,2 +0,0 @@
|
|||||||
xdebug
|
|
||||||
pcov
|
|
||||||
112
src/core.ts
112
src/core.ts
@@ -1,112 +0,0 @@
|
|||||||
import {EOL} from 'os';
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Commands
|
|
||||||
*
|
|
||||||
* Command Format:
|
|
||||||
* ::name key=value,key=value::message
|
|
||||||
*
|
|
||||||
* @see https://docs.github.com/en/actions/using-workflows/workflow-commands-for-github-actions
|
|
||||||
*/
|
|
||||||
|
|
||||||
interface CommandProperties {
|
|
||||||
[key: string]: string;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Sanitizes the message for use in a workflow command.
|
|
||||||
* @param message
|
|
||||||
*/
|
|
||||||
function toCommandValue(message: string | Error): string {
|
|
||||||
if (message instanceof Error) {
|
|
||||||
return message.toString();
|
|
||||||
}
|
|
||||||
return message;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Escapes data for safe use in workflow command messages.
|
|
||||||
* @param s
|
|
||||||
*/
|
|
||||||
function escapeData(s: string | Error): string {
|
|
||||||
return toCommandValue(s)
|
|
||||||
.replace(/%/g, '%25')
|
|
||||||
.replace(/\r/g, '%0D')
|
|
||||||
.replace(/\n/g, '%0A');
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Escapes property values for safe use in workflow command properties.
|
|
||||||
* @param s
|
|
||||||
*/
|
|
||||||
function escapeProperty(s: string): string {
|
|
||||||
return s
|
|
||||||
.replace(/%/g, '%25')
|
|
||||||
.replace(/\r/g, '%0D')
|
|
||||||
.replace(/\n/g, '%0A')
|
|
||||||
.replace(/:/g, '%3A')
|
|
||||||
.replace(/,/g, '%2C');
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Issues a command to the GitHub Actions runner.
|
|
||||||
*
|
|
||||||
* @param command - The command name to issue
|
|
||||||
* @param properties - Additional properties for the command (key-value pairs)
|
|
||||||
* @param message - The message to include with the command
|
|
||||||
*/
|
|
||||||
export function issueCommand(
|
|
||||||
command: string,
|
|
||||||
properties: CommandProperties,
|
|
||||||
message: string | Error
|
|
||||||
): void {
|
|
||||||
let cmdStr = `::${command}`;
|
|
||||||
|
|
||||||
if (properties && Object.keys(properties).length > 0) {
|
|
||||||
cmdStr += ' ';
|
|
||||||
const props = Object.entries(properties)
|
|
||||||
.filter(([, val]) => val)
|
|
||||||
.map(([key, val]) => `${key}=${escapeProperty(val)}`)
|
|
||||||
.join(',');
|
|
||||||
cmdStr += props;
|
|
||||||
}
|
|
||||||
|
|
||||||
cmdStr += `::${escapeData(message)}`;
|
|
||||||
process.stdout.write(cmdStr + EOL);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Adds an error issue.
|
|
||||||
* @param message - error issue message
|
|
||||||
*/
|
|
||||||
export function error(message: string | Error): void {
|
|
||||||
issueCommand('error', {}, message);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Sets the action status to failed.
|
|
||||||
* When the action exits it will be with an exit code of 1.
|
|
||||||
* @param message - add error issue message
|
|
||||||
*/
|
|
||||||
export function setFailed(message: string | Error): void {
|
|
||||||
process.exitCode = 1;
|
|
||||||
error(message);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Gets the value of an input.
|
|
||||||
* The value is trimmed.
|
|
||||||
* Returns an empty string if the value is not defined.
|
|
||||||
*
|
|
||||||
* @param name - name of the input to get
|
|
||||||
* @param required - whether the input is required
|
|
||||||
* @returns string
|
|
||||||
*/
|
|
||||||
export function getInput(name: string, required = false): string {
|
|
||||||
const val: string =
|
|
||||||
process.env[`INPUT_${name.replace(/ /g, '_').toUpperCase()}`] || '';
|
|
||||||
if (required && !val) {
|
|
||||||
throw new Error(`Input required and not supplied: ${name}`);
|
|
||||||
}
|
|
||||||
return val.trim();
|
|
||||||
}
|
|
||||||
131
src/coverage.ts
131
src/coverage.ts
@@ -2,84 +2,73 @@ import * as utils from './utils';
|
|||||||
import * as extensions from './extensions';
|
import * as extensions from './extensions';
|
||||||
import * as config from './config';
|
import * as config from './config';
|
||||||
|
|
||||||
export async function checkXdebugError(
|
|
||||||
extension: string,
|
|
||||||
version: string
|
|
||||||
): Promise<string> {
|
|
||||||
if (
|
|
||||||
(/^5\.[3-6]$|^7\.[0-1]$/.test(version) && extension == 'xdebug3') ||
|
|
||||||
(/^8\.[0-9]$/.test(version) && extension == 'xdebug2')
|
|
||||||
) {
|
|
||||||
return extension + ' is not supported on PHP ' + version;
|
|
||||||
}
|
|
||||||
return '';
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Function to setup Xdebug
|
* Function to setup Xdebug
|
||||||
*
|
*
|
||||||
* @param extension
|
* @param extension
|
||||||
* @param version
|
* @param version
|
||||||
* @param os
|
* @param os_version
|
||||||
* @param pipe
|
* @param pipe
|
||||||
*/
|
*/
|
||||||
export async function addCoverageXdebug(
|
export async function addCoverageXdebug(
|
||||||
extension: string,
|
extension: string,
|
||||||
version: string,
|
version: string,
|
||||||
os: string,
|
os_version: string,
|
||||||
pipe: string
|
pipe: string
|
||||||
): Promise<string> {
|
): Promise<string> {
|
||||||
let script = '\n';
|
const xdebug =
|
||||||
const error: string = await checkXdebugError(extension, version);
|
(await extensions.addExtension(extension, version, os_version, true)) +
|
||||||
if (!error) {
|
pipe;
|
||||||
script +=
|
const log = await utils.addLog(
|
||||||
(await extensions.addExtension(':pcov:false', version, os, true)) + pipe;
|
'$tick',
|
||||||
extension = extension == 'xdebug3' ? 'xdebug' : extension;
|
extension,
|
||||||
script +=
|
'Xdebug enabled as coverage driver',
|
||||||
(await extensions.addExtension(extension, version, os, true)) + pipe;
|
os_version
|
||||||
script += await utils.setVariable(
|
|
||||||
'xdebug_version',
|
|
||||||
'php -r "echo phpversion(\'xdebug\');"',
|
|
||||||
os
|
|
||||||
);
|
);
|
||||||
script +=
|
return xdebug + '\n' + log;
|
||||||
(await utils.getCommand(os, 'extension_log')) +
|
|
||||||
'xdebug "Xdebug $xdebug_version enabled as coverage driver"';
|
|
||||||
} else {
|
|
||||||
script += await utils.addLog('$cross', extension, error, os);
|
|
||||||
}
|
|
||||||
return script;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Function to setup PCOV
|
* Function to setup PCOV
|
||||||
*
|
*
|
||||||
* @param version
|
* @param version
|
||||||
* @param os
|
* @param os_version
|
||||||
* @param pipe
|
* @param pipe
|
||||||
*/
|
*/
|
||||||
export async function addCoveragePCOV(
|
export async function addCoveragePCOV(
|
||||||
version: string,
|
version: string,
|
||||||
os: string,
|
os_version: string,
|
||||||
pipe: string
|
pipe: string
|
||||||
): Promise<string> {
|
): Promise<string> {
|
||||||
let script = '\n';
|
let script = '\n';
|
||||||
switch (true) {
|
switch (true) {
|
||||||
default:
|
default:
|
||||||
script +=
|
script +=
|
||||||
(await extensions.addExtension(':xdebug:false', version, os, true)) +
|
(await extensions.addExtension('pcov', version, os_version, true)) +
|
||||||
pipe;
|
pipe +
|
||||||
|
'\n';
|
||||||
script +=
|
script +=
|
||||||
(await extensions.addExtension('pcov', version, os, true)) + pipe;
|
(await config.addINIValues('pcov.enabled=1', os_version, true)) + '\n';
|
||||||
script += (await config.addINIValues('pcov.enabled=1', os, true)) + '\n';
|
|
||||||
script += await utils.setVariable(
|
// add command to disable xdebug and enable pcov
|
||||||
'pcov_version',
|
switch (os_version) {
|
||||||
'php -r "echo phpversion(\'pcov\');"',
|
case 'linux':
|
||||||
os
|
case 'darwin':
|
||||||
|
script += 'remove_extension xdebug' + pipe + '\n';
|
||||||
|
break;
|
||||||
|
case 'win32':
|
||||||
|
script += 'Remove-Extension xdebug' + pipe + '\n';
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
// success
|
||||||
|
script += await utils.addLog(
|
||||||
|
'$tick',
|
||||||
|
'coverage: pcov',
|
||||||
|
'PCOV enabled as coverage driver',
|
||||||
|
os_version
|
||||||
);
|
);
|
||||||
script +=
|
// version is not supported
|
||||||
(await utils.getCommand(os, 'extension_log')) +
|
|
||||||
'pcov "PCOV $pcov_version enabled as coverage driver"';
|
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case /5\.[3-6]|7\.0/.test(version):
|
case /5\.[3-6]|7\.0/.test(version):
|
||||||
@@ -87,7 +76,7 @@ export async function addCoveragePCOV(
|
|||||||
'$cross',
|
'$cross',
|
||||||
'pcov',
|
'pcov',
|
||||||
'PHP 7.1 or newer is required',
|
'PHP 7.1 or newer is required',
|
||||||
os
|
os_version
|
||||||
);
|
);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
@@ -99,20 +88,32 @@ export async function addCoveragePCOV(
|
|||||||
* Function to disable Xdebug and PCOV
|
* Function to disable Xdebug and PCOV
|
||||||
*
|
*
|
||||||
* @param version
|
* @param version
|
||||||
* @param os
|
* @param os_version
|
||||||
* @param pipe
|
* @param pipe
|
||||||
*/
|
*/
|
||||||
export async function disableCoverage(
|
export async function disableCoverage(
|
||||||
version: string,
|
version: string,
|
||||||
os: string,
|
os_version: string,
|
||||||
pipe: string
|
pipe: string
|
||||||
): Promise<string> {
|
): Promise<string> {
|
||||||
let script = '\n';
|
let script = '\n';
|
||||||
script +=
|
switch (os_version) {
|
||||||
(await extensions.addExtension(':pcov:false', version, os, true)) + pipe;
|
case 'linux':
|
||||||
script +=
|
case 'darwin':
|
||||||
(await extensions.addExtension(':xdebug:false', version, os, true)) + pipe;
|
script += 'remove_extension xdebug' + pipe + '\n';
|
||||||
script += await utils.addLog('$tick', 'none', 'Disabled Xdebug and PCOV', os);
|
script += 'remove_extension pcov' + pipe + '\n';
|
||||||
|
break;
|
||||||
|
case 'win32':
|
||||||
|
script += 'Remove-Extension xdebug' + pipe + '\n';
|
||||||
|
script += 'Remove-Extension pcov' + pipe + '\n';
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
script += await utils.addLog(
|
||||||
|
'$tick',
|
||||||
|
'none',
|
||||||
|
'Disabled Xdebug and PCOV',
|
||||||
|
os_version
|
||||||
|
);
|
||||||
|
|
||||||
return script;
|
return script;
|
||||||
}
|
}
|
||||||
@@ -122,27 +123,31 @@ export async function disableCoverage(
|
|||||||
*
|
*
|
||||||
* @param coverage_driver
|
* @param coverage_driver
|
||||||
* @param version
|
* @param version
|
||||||
* @param os
|
* @param os_version
|
||||||
*/
|
*/
|
||||||
export async function addCoverage(
|
export async function addCoverage(
|
||||||
coverage_driver: string,
|
coverage_driver: string,
|
||||||
version: string,
|
version: string,
|
||||||
os: string
|
os_version: string
|
||||||
): Promise<string> {
|
): Promise<string> {
|
||||||
coverage_driver = coverage_driver.toLowerCase();
|
coverage_driver = coverage_driver.toLowerCase();
|
||||||
const script: string = '\n' + (await utils.stepLog('Setup Coverage', os));
|
const script: string =
|
||||||
const pipe: string = (await utils.suppressOutput(os)) + '\n';
|
'\n' + (await utils.stepLog('Setup Coverage', os_version));
|
||||||
|
const pipe: string = await utils.suppressOutput(os_version);
|
||||||
switch (coverage_driver) {
|
switch (coverage_driver) {
|
||||||
case 'pcov':
|
case 'pcov':
|
||||||
return script + (await addCoveragePCOV(version, os, pipe));
|
return script + (await addCoveragePCOV(version, os_version, pipe));
|
||||||
case 'xdebug':
|
case 'xdebug':
|
||||||
case 'xdebug2':
|
|
||||||
case 'xdebug3':
|
case 'xdebug3':
|
||||||
return (
|
return (
|
||||||
script + (await addCoverageXdebug(coverage_driver, version, os, pipe))
|
script + (await addCoverageXdebug('xdebug', version, os_version, pipe))
|
||||||
|
);
|
||||||
|
case 'xdebug2':
|
||||||
|
return (
|
||||||
|
script + (await addCoverageXdebug('xdebug2', version, os_version, pipe))
|
||||||
);
|
);
|
||||||
case 'none':
|
case 'none':
|
||||||
return script + (await disableCoverage(version, os, pipe));
|
return script + (await disableCoverage(version, os_version, pipe));
|
||||||
default:
|
default:
|
||||||
return '';
|
return '';
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -17,53 +17,35 @@ export async function addExtensionDarwin(
|
|||||||
const version_extension: string = version + extension;
|
const version_extension: string = version + extension;
|
||||||
const [ext_name, ext_version]: string[] = extension.split('-');
|
const [ext_name, ext_version]: string[] = extension.split('-');
|
||||||
const ext_prefix = await utils.getExtensionPrefix(ext_name);
|
const ext_prefix = await utils.getExtensionPrefix(ext_name);
|
||||||
|
|
||||||
switch (true) {
|
switch (true) {
|
||||||
// match :extension
|
// match :extension
|
||||||
case /^:/.test(ext_name):
|
case /^:/.test(ext_name):
|
||||||
remove_script += '\ndisable_extension' + ext_name.replace(/:/g, ' ');
|
remove_script += '\nremove_extension ' + ext_name.slice(1);
|
||||||
return;
|
return;
|
||||||
// Match none
|
// match 5.3blackfire...8.0blackfire
|
||||||
case /^none$/.test(ext_name):
|
// match 5.3blackfire-(semver)...8.0blackfire-(semver)
|
||||||
add_script += '\ndisable_all_shared';
|
// match pdo_oci and oci8
|
||||||
return;
|
// match 5.3ioncube...7.4ioncube, 5.3geos...7.4geos
|
||||||
// match extensions for compiling from source
|
// match 7.0phalcon3...7.3phalcon3 and 7.2phalcon4...7.4phalcon4
|
||||||
case /.+-.+\/.+@.+/.test(extension):
|
// match 5.6couchbase...7.4couchbase
|
||||||
add_script += await utils.parseExtensionSource(extension, ext_prefix);
|
case /^(5\.[3-6]|7\.[0-4]|8\.0)blackfire(-\d+\.\d+\.\d+)?$/.test(
|
||||||
return;
|
|
||||||
// match 7.4relay...8.5relay
|
|
||||||
// match 5.3blackfire...8.5blackfire
|
|
||||||
// match 5.3blackfire-(semver)...8.5blackfire-(semver)
|
|
||||||
// match couchbase, event, geos, ibm_db2, pdo_ibm, pdo_oci, oci8, http, pecl_http
|
|
||||||
// match 5.3ioncube...8.5ioncube
|
|
||||||
// match 7.0phalcon3...7.3phalcon3, 7.2phalcon4...7.4phalcon4, and 7.4phalcon5...8.4phalcon5
|
|
||||||
// match 7.0zephir_parser...8.5zephir_parser
|
|
||||||
case /^(7\.4|8\.[0-5])relay(-v?\d+\.\d+\.\d+|-nightly)?$/.test(
|
|
||||||
version_extension
|
|
||||||
):
|
|
||||||
case /^(5\.[3-6]|7\.[0-4]|8\.[0-5])blackfire(-\d+\.\d+\.\d+)?$/.test(
|
|
||||||
version_extension
|
|
||||||
):
|
|
||||||
case /^couchbase|^event|^gearman$|^geos$|^ibm_db2$|^pdo_ibm$|^pdo_oci$|^oci8$|^(pecl_)?http|^pdo_firebird$/.test(
|
|
||||||
extension
|
|
||||||
):
|
|
||||||
case /^(5\.[3-6]|7\.[0-4]|8\.[0-5])ioncube$/.test(version_extension):
|
|
||||||
case /(5\.6|7\.[0-3])phalcon3|7\.[2-4]phalcon4|(7\.4|8\.[0-4])phalcon5?/.test(
|
|
||||||
version_extension
|
|
||||||
):
|
|
||||||
case /(?<!5\.[3-6])(pdo_)?sqlsrv$/.test(version_extension):
|
|
||||||
case /^(7\.[0-4]|8\.[0-5])zephir_parser(-v?\d+\.\d+\.\d+)?$/.test(
|
|
||||||
version_extension
|
version_extension
|
||||||
):
|
):
|
||||||
|
case /^pdo_oci$|^oci8$/.test(extension):
|
||||||
|
case /^(5\.[3-6]|7\.[0-4])(ioncube|geos)$/.test(version_extension):
|
||||||
|
case /^7\.[0-3]phalcon3$|^7\.[2-4]phalcon4$/.test(version_extension):
|
||||||
|
case /^5\.6couchbase$|^7\.[0-4]couchbase$/.test(version_extension):
|
||||||
add_script += await utils.customPackage(
|
add_script += await utils.customPackage(
|
||||||
ext_name,
|
ext_name,
|
||||||
'extensions',
|
'ext',
|
||||||
extension,
|
extension,
|
||||||
'darwin'
|
'darwin'
|
||||||
);
|
);
|
||||||
return;
|
return;
|
||||||
// match pre-release versions. For example - xdebug-beta
|
// match pre-release versions. For example - xdebug-beta
|
||||||
case /.+-(stable|beta|alpha|devel|snapshot|rc|preview)/.test(extension):
|
case /.*-(stable|beta|alpha|devel|snapshot|rc|preview)/.test(
|
||||||
|
version_extension
|
||||||
|
):
|
||||||
add_script += await utils.joins(
|
add_script += await utils.joins(
|
||||||
'\nadd_unstable_extension',
|
'\nadd_unstable_extension',
|
||||||
ext_name,
|
ext_name,
|
||||||
@@ -72,7 +54,7 @@ export async function addExtensionDarwin(
|
|||||||
);
|
);
|
||||||
return;
|
return;
|
||||||
// match semver
|
// match semver
|
||||||
case /.+-\d+(\.\d+\.\d+.*)?/.test(extension):
|
case /.*-\d+\.\d+\.\d+.*/.test(version_extension):
|
||||||
add_script += await utils.joins(
|
add_script += await utils.joins(
|
||||||
'\nadd_pecl_extension',
|
'\nadd_pecl_extension',
|
||||||
ext_name,
|
ext_name,
|
||||||
@@ -84,21 +66,22 @@ export async function addExtensionDarwin(
|
|||||||
case /(5\.[3-6]|7\.0)pcov/.test(version_extension):
|
case /(5\.[3-6]|7\.0)pcov/.test(version_extension):
|
||||||
add_script += await utils.getUnsupportedLog('pcov', version, 'darwin');
|
add_script += await utils.getUnsupportedLog('pcov', version, 'darwin');
|
||||||
return;
|
return;
|
||||||
// match brew extensions
|
// match 5.6 to 8.9 for amqp, grpc, igbinary, imagick, imap, protobuf, swoole and xdebug
|
||||||
case /(?<!5\.[3-5])(amqp|apcu|brotli|excimer|expect|gmagick|gnupg|grpc|igbinary|imagick|imap|interbase|mailparse|maxminddb|mcrypt|memcache|memcached|mongodb|mongodb1|msgpack|newrelic|oauth|opentelemetry|pdo_firebird|pinba|protobuf|psr|raphf|rdkafka|redis|scalar_objects|seaslog|snmp|spx|ssh2|swoole|uopz|uploadprogress|uuid|vld|xdebug|xdebug2|xhprof|yaml|zmq|zstd)/.test(
|
// match 7.1 to 8.9 for pcov
|
||||||
|
case /(5\.6|7\.[0-4]|8\.[0-9])(amqp|grpc|igbinary|imagick|imap|protobuf|swoole|xdebug)/.test(
|
||||||
version_extension
|
version_extension
|
||||||
):
|
):
|
||||||
case /(?<!5\.[3-6])(ds|v8js)/.test(version_extension):
|
case /(7\.[1-4]|8\.[0-9])pcov/.test(version_extension):
|
||||||
case /(5\.6|7\.[0-4])(propro|lua)/.test(version_extension):
|
|
||||||
case /(?<!5\.[3-6]|7\.0)pcov/.test(version_extension):
|
|
||||||
case /(?<!5\.[3-6])(ast|vips|xlswriter)/.test(version_extension):
|
|
||||||
case /^(8\.[0-5])swow$/.test(version_extension):
|
|
||||||
add_script += await utils.joins(
|
add_script += await utils.joins(
|
||||||
'\nadd_brew_extension',
|
'\nadd_brew_extension',
|
||||||
ext_name,
|
ext_name,
|
||||||
ext_prefix
|
ext_prefix
|
||||||
);
|
);
|
||||||
return;
|
return;
|
||||||
|
// match 5.6redis
|
||||||
|
case /5\.6redis/.test(version_extension):
|
||||||
|
extension = 'redis-2.2.8';
|
||||||
|
break;
|
||||||
// match sqlite
|
// match sqlite
|
||||||
case /^sqlite$/.test(extension):
|
case /^sqlite$/.test(extension):
|
||||||
extension = 'sqlite3';
|
extension = 'sqlite3';
|
||||||
@@ -131,60 +114,46 @@ export async function addExtensionWindows(
|
|||||||
switch (true) {
|
switch (true) {
|
||||||
// Match :extension
|
// Match :extension
|
||||||
case /^:/.test(ext_name):
|
case /^:/.test(ext_name):
|
||||||
remove_script += '\nDisable-Extension' + ext_name.replace(/:/g, ' ');
|
remove_script += '\nRemove-Extension ' + ext_name.slice(1);
|
||||||
break;
|
break;
|
||||||
// Match none
|
// match 5.3blackfire...8.0blackfire
|
||||||
case /^none$/.test(ext_name):
|
// match 5.3blackfire-(semver)...8.0blackfire-(semver)
|
||||||
add_script += '\nDisable-AllShared';
|
// match pdo_oci and oci8
|
||||||
break;
|
// match 5.3ioncube...7.4ioncube
|
||||||
// match 5.3blackfire...8.5blackfire
|
// match 7.0phalcon3...7.3phalcon3 and 7.2phalcon4...7.4phalcon4
|
||||||
// match 5.3blackfire-(semver)...8.5blackfire-(semver)
|
case /^(5\.[3-6]|7\.[0-4]|8\.0)blackfire(-\d+\.\d+\.\d+)?$/.test(
|
||||||
// match ibm_db2, pdo_ibm, pdo_oci and oci8
|
|
||||||
// match 5.3ioncube...8.5ioncube
|
|
||||||
// match 7.0phalcon3...7.3phalcon3, 7.2phalcon4...7.4phalcon4, and 7.4phalcon5...8.4phalcon5
|
|
||||||
// match 7.1pecl_http...8.5pecl_http and 7.1http...8.5http
|
|
||||||
// match 7.0zephir_parser...8.5zephir_parser
|
|
||||||
case /^(5\.[3-6]|7\.[0-4]|8\.[0-5])blackfire(-\d+\.\d+\.\d+)?$/.test(
|
|
||||||
version_extension
|
|
||||||
):
|
|
||||||
case /^ibm_db2$|^pdo_ibm$|^pdo_oci$|^oci8$|^pdo_firebird$/.test(
|
|
||||||
extension
|
|
||||||
):
|
|
||||||
case /^(5\.[3-6]|7\.[0-4]|8\.[0-5])ioncube$/.test(version_extension):
|
|
||||||
case /^7\.[0-3]phalcon3$|^7\.[2-4]phalcon4$|^(7\.4|8\.[0-4])phalcon5?$/.test(
|
|
||||||
version_extension
|
|
||||||
):
|
|
||||||
case /^(7\.[1-4]|8\.[0-5])(pecl_)?http/.test(version_extension):
|
|
||||||
case /(?<!5\.[3-6])(pdo_)?sqlsrv$/.test(version_extension):
|
|
||||||
case /^(7\.[0-4]|8\.[0-5])zephir_parser(-v?\d+\.\d+\.\d+)?$/.test(
|
|
||||||
version_extension
|
version_extension
|
||||||
):
|
):
|
||||||
|
case /^pdo_oci$|^oci8$/.test(extension):
|
||||||
|
case /^5\.[3-6]ioncube$|^7\.[0-4]ioncube$/.test(version_extension):
|
||||||
|
case /^7\.[0-3]phalcon3$|^7\.[2-4]phalcon4$/.test(version_extension):
|
||||||
add_script += await utils.customPackage(
|
add_script += await utils.customPackage(
|
||||||
ext_name,
|
ext_name,
|
||||||
'extensions',
|
'ext',
|
||||||
extension,
|
extension,
|
||||||
'win32'
|
'win32'
|
||||||
);
|
);
|
||||||
return;
|
return;
|
||||||
// match pre-release versions. For example - xdebug-beta
|
// match pre-release versions. For example - xdebug-beta
|
||||||
case /.+-(stable|beta|alpha|devel|snapshot)/.test(extension):
|
case /.*-(stable|beta|alpha|devel|snapshot)/.test(version_extension):
|
||||||
add_script += await utils.joins(
|
add_script += await utils.joins(
|
||||||
'\nAdd-Extension',
|
'\nAdd-Extension',
|
||||||
ext_name,
|
ext_name,
|
||||||
ext_version.replace('stable', '')
|
ext_version.replace('stable', '')
|
||||||
);
|
);
|
||||||
break;
|
break;
|
||||||
// match extensions for compiling from source
|
// match semver without state
|
||||||
case /.+-.+\/.+@.+/.test(extension):
|
case /.*-\d+\.\d+\.\d+$/.test(version_extension):
|
||||||
add_script += await utils.getUnsupportedLog(
|
add_script += await utils.joins(
|
||||||
extension,
|
'\nAdd-Extension',
|
||||||
version,
|
ext_name,
|
||||||
'win32'
|
'stable',
|
||||||
|
ext_version
|
||||||
);
|
);
|
||||||
break;
|
break;
|
||||||
// match semver with state
|
// match semver with state
|
||||||
case /.+-\d+\.\d+\.\d+[a-zA-Z]+\d*/.test(extension):
|
case /.*-(\d+\.\d+\.\d)([a-zA-Z+]+)\d*/.test(version_extension):
|
||||||
matches = /.+-(\d+\.\d+\.\d+)([a-zA-Z]+)\d*/.exec(
|
matches = /.*-(\d+\.\d+\.\d)([a-zA-Z+]+)\d*/.exec(
|
||||||
version_extension
|
version_extension
|
||||||
) as RegExpExecArray;
|
) as RegExpExecArray;
|
||||||
add_script += await utils.joins(
|
add_script += await utils.joins(
|
||||||
@@ -194,15 +163,6 @@ export async function addExtensionWindows(
|
|||||||
matches[1]
|
matches[1]
|
||||||
);
|
);
|
||||||
break;
|
break;
|
||||||
// match semver without state
|
|
||||||
case /.+-\d+(\.\d+\.\d+.*)?/.test(extension):
|
|
||||||
add_script += await utils.joins(
|
|
||||||
'\nAdd-Extension',
|
|
||||||
ext_name,
|
|
||||||
'stable',
|
|
||||||
ext_version
|
|
||||||
);
|
|
||||||
break;
|
|
||||||
// match 7.2xdebug2 to 7.4xdebug2
|
// match 7.2xdebug2 to 7.4xdebug2
|
||||||
case /7\.[2-4]xdebug2/.test(version_extension):
|
case /7\.[2-4]xdebug2/.test(version_extension):
|
||||||
add_script += '\nAdd-Extension xdebug stable 2.9.8';
|
add_script += '\nAdd-Extension xdebug stable 2.9.8';
|
||||||
@@ -211,15 +171,17 @@ export async function addExtensionWindows(
|
|||||||
case /(5\.[3-6]|7\.0)pcov/.test(version_extension):
|
case /(5\.[3-6]|7\.0)pcov/.test(version_extension):
|
||||||
add_script += await utils.getUnsupportedLog('pcov', version, 'win32');
|
add_script += await utils.getUnsupportedLog('pcov', version, 'win32');
|
||||||
break;
|
break;
|
||||||
// match 5.3 to 5.6 - mysql, mysqli, mysqlnd
|
// match 5.3mysql..5.6mysql
|
||||||
case /^5\.[3-6](?<!pdo_)(mysql|mysqli|mysqlnd)$/.test(version_extension):
|
// match 5.3mysqli..5.6mysqli
|
||||||
|
// match 5.3mysqlnd..5.6mysqlnd
|
||||||
|
case /^5\.\d(mysql|mysqli|mysqlnd)$/.test(version_extension):
|
||||||
add_script +=
|
add_script +=
|
||||||
'\nAdd-Extension mysql\nAdd-Extension mysqli\nAdd-Extension mysqlnd';
|
'\nAdd-Extension mysql\nAdd-Extension mysqli\nAdd-Extension mysqlnd';
|
||||||
break;
|
break;
|
||||||
// match 7.0 and newer mysql, mysqli and mysqlnd
|
// match 7.0mysql..8.9mysql
|
||||||
case /(?<!5\.[3-6])(?<!pdo_)(mysql|mysqli|mysqlnd)$/.test(
|
// match 7.0mysqli..8.9mysqli
|
||||||
version_extension
|
// match 7.0mysqlnd..8.9mysqlnd
|
||||||
):
|
case /[7-8]\.\d(mysql|mysqli|mysqlnd)$/.test(version_extension):
|
||||||
add_script += '\nAdd-Extension mysqli\nAdd-Extension mysqlnd';
|
add_script += '\nAdd-Extension mysqli\nAdd-Extension mysqlnd';
|
||||||
break;
|
break;
|
||||||
// match sqlite
|
// match sqlite
|
||||||
@@ -250,62 +212,42 @@ export async function addExtensionLinux(
|
|||||||
let remove_script = '';
|
let remove_script = '';
|
||||||
await utils.asyncForEach(extensions, async function (extension: string) {
|
await utils.asyncForEach(extensions, async function (extension: string) {
|
||||||
const version_extension: string = version + extension;
|
const version_extension: string = version + extension;
|
||||||
const [ext_name, ext_version]: string[] = extension
|
const [ext_name, ext_version]: string[] = extension.split('-');
|
||||||
.split(/-(.+)/)
|
|
||||||
.filter(Boolean);
|
|
||||||
const ext_prefix = await utils.getExtensionPrefix(ext_name);
|
const ext_prefix = await utils.getExtensionPrefix(ext_name);
|
||||||
|
|
||||||
switch (true) {
|
switch (true) {
|
||||||
// Match :extension
|
// Match :extension
|
||||||
case /^:/.test(ext_name):
|
case /^:/.test(ext_name):
|
||||||
remove_script += '\ndisable_extension' + ext_name.replace(/:/g, ' ');
|
remove_script += '\nremove_extension ' + ext_name.slice(1);
|
||||||
return;
|
return;
|
||||||
// Match none
|
// match 5.3blackfire...8.0blackfire
|
||||||
case /^none$/.test(ext_name):
|
// match 5.3blackfire-(semver)...8.0blackfire-(semver)
|
||||||
add_script += '\ndisable_all_shared';
|
|
||||||
return;
|
|
||||||
// match extensions for compiling from source
|
|
||||||
case /.+-.+\/.+@.+/.test(extension):
|
|
||||||
add_script += await utils.parseExtensionSource(extension, ext_prefix);
|
|
||||||
return;
|
|
||||||
// match 7.4relay...8.5relay
|
|
||||||
// match 5.3blackfire...8.5blackfire
|
|
||||||
// match 5.3blackfire-(semver)...8.5blackfire-(semver)
|
|
||||||
// match 5.3pdo_cubrid...7.2php_cubrid, 5.3cubrid...7.4cubrid
|
// match 5.3pdo_cubrid...7.2php_cubrid, 5.3cubrid...7.4cubrid
|
||||||
// match couchbase, geos, ibm_db2, pdo_ibm, pdo_oci, oci8, http, pecl_http
|
// match pdo_oci and oci8
|
||||||
// match 5.3ioncube...8.5ioncube
|
// match 5.3ioncube...7.4ioncube, 5.3geos...7.4geos
|
||||||
// match 7.0phalcon3...7.3phalcon3, 7.2phalcon4...7.4phalcon4, 7.4phalcon5...8.4phalcon5
|
// match 7.0phalcon3...7.3phalcon3 and 7.2phalcon4...7.4phalcon4
|
||||||
// match 7.0zephir_parser...8.5zephir_parser
|
// match 5.6gearman...7.4gearman, 5.6couchbase...7.4couchbase
|
||||||
case /^(7\.4|8\.[0-5])relay(-v?\d+\.\d+\.\d+|-nightly)?$/.test(
|
case /^(5\.[3-6]|7\.[0-4]|8\.0)blackfire(-\d+\.\d+\.\d+)?$/.test(
|
||||||
version_extension
|
|
||||||
):
|
|
||||||
case /^(5\.[3-6]|7\.[0-4]|8\.[0-5])blackfire(-\d+\.\d+\.\d+)?$/.test(
|
|
||||||
version_extension
|
version_extension
|
||||||
):
|
):
|
||||||
case /^((5\.[3-6])|(7\.[0-2]))pdo_cubrid$|^((5\.[3-6])|(7\.[0-4]))cubrid$/.test(
|
case /^((5\.[3-6])|(7\.[0-2]))pdo_cubrid$|^((5\.[3-6])|(7\.[0-4]))cubrid$/.test(
|
||||||
version_extension
|
version_extension
|
||||||
):
|
):
|
||||||
case /^couchbase|^event|^gearman$|^geos$|^ibm_db2$|^pdo_ibm$|^pdo_oci$|^oci8$|^(pecl_)?http|^pdo_firebird$/.test(
|
case /^pdo_oci$|^oci8$/.test(extension):
|
||||||
extension
|
case /^(5\.6|7\.[0-4]|8\.0)intl-[\d]+\.[\d]+$/.test(version_extension):
|
||||||
):
|
case /^(5\.[3-6]|7\.[0-4])(ioncube|geos)$/.test(version_extension):
|
||||||
case /(?<!5\.[3-5])intl-\d+\.\d+$/.test(version_extension):
|
case /^7\.[0-3]phalcon3$|^7\.[2-4]phalcon4$/.test(version_extension):
|
||||||
case /^(5\.[3-6]|7\.[0-4]|8\.[0-5])ioncube$/.test(version_extension):
|
case /^((5\.6)|(7\.[0-4]))(gearman|couchbase)$/.test(version_extension):
|
||||||
case /^7\.[0-3]phalcon3$|^7\.[2-4]phalcon4$|^(7\.4|8\.[0-4])phalcon5?$/.test(
|
|
||||||
version_extension
|
|
||||||
):
|
|
||||||
case /(?<!5\.[3-6])(pdo_)?sqlsrv$/.test(version_extension):
|
|
||||||
case /^(7\.[0-4]|8\.[0-5])zephir_parser(-v?\d+\.\d+\.\d+)?$/.test(
|
|
||||||
version_extension
|
|
||||||
):
|
|
||||||
add_script += await utils.customPackage(
|
add_script += await utils.customPackage(
|
||||||
ext_name,
|
ext_name,
|
||||||
'extensions',
|
'ext',
|
||||||
extension,
|
extension,
|
||||||
'linux'
|
'linux'
|
||||||
);
|
);
|
||||||
return;
|
return;
|
||||||
// match pre-release versions. For example - xdebug-beta
|
// match pre-release versions. For example - xdebug-beta
|
||||||
case /.+-(stable|beta|alpha|devel|snapshot|rc|preview)/.test(extension):
|
case /.*-(stable|beta|alpha|devel|snapshot|rc|preview)/.test(
|
||||||
|
version_extension
|
||||||
|
):
|
||||||
add_script += await utils.joins(
|
add_script += await utils.joins(
|
||||||
'\nadd_unstable_extension',
|
'\nadd_unstable_extension',
|
||||||
ext_name,
|
ext_name,
|
||||||
@@ -314,7 +256,7 @@ export async function addExtensionLinux(
|
|||||||
);
|
);
|
||||||
return;
|
return;
|
||||||
// match semver versions
|
// match semver versions
|
||||||
case /.+-\d+(\.\d+\.\d+.*)?/.test(extension):
|
case /.*-\d+\.\d+\.\d+.*/.test(version_extension):
|
||||||
add_script += await utils.joins(
|
add_script += await utils.joins(
|
||||||
'\nadd_pecl_extension',
|
'\nadd_pecl_extension',
|
||||||
ext_name,
|
ext_name,
|
||||||
@@ -336,7 +278,7 @@ export async function addExtensionLinux(
|
|||||||
);
|
);
|
||||||
return;
|
return;
|
||||||
// match pdo extensions
|
// match pdo extensions
|
||||||
case /^pdo[_-].+/.test(extension):
|
case /.*pdo[_-].*/.test(version_extension):
|
||||||
extension = extension.replace(/pdo[_-]|3/, '');
|
extension = extension.replace(/pdo[_-]|3/, '');
|
||||||
add_script += '\nadd_pdo_extension ' + extension;
|
add_script += '\nadd_pdo_extension ' + extension;
|
||||||
return;
|
return;
|
||||||
@@ -357,20 +299,20 @@ export async function addExtensionLinux(
|
|||||||
*
|
*
|
||||||
* @param extension_csv
|
* @param extension_csv
|
||||||
* @param version
|
* @param version
|
||||||
* @param os
|
* @param os_version
|
||||||
* @param no_step
|
* @param no_step
|
||||||
*/
|
*/
|
||||||
export async function addExtension(
|
export async function addExtension(
|
||||||
extension_csv: string,
|
extension_csv: string,
|
||||||
version: string,
|
version: string,
|
||||||
os: string,
|
os_version: string,
|
||||||
no_step = false
|
no_step = false
|
||||||
): Promise<string> {
|
): Promise<string> {
|
||||||
const log: string = await utils.stepLog('Setup Extensions', os);
|
const log: string = await utils.stepLog('Setup Extensions', os_version);
|
||||||
let script = '\n';
|
let script = '\n';
|
||||||
switch (no_step) {
|
switch (no_step) {
|
||||||
case true:
|
case true:
|
||||||
script += log + (await utils.suppressOutput(os));
|
script += log + (await utils.suppressOutput(os_version));
|
||||||
break;
|
break;
|
||||||
case false:
|
case false:
|
||||||
default:
|
default:
|
||||||
@@ -378,7 +320,7 @@ export async function addExtension(
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
switch (os) {
|
switch (os_version) {
|
||||||
case 'win32':
|
case 'win32':
|
||||||
return script + (await addExtensionWindows(extension_csv, version));
|
return script + (await addExtensionWindows(extension_csv, version));
|
||||||
case 'darwin':
|
case 'darwin':
|
||||||
@@ -387,8 +329,8 @@ export async function addExtension(
|
|||||||
return script + (await addExtensionLinux(extension_csv, version));
|
return script + (await addExtensionLinux(extension_csv, version));
|
||||||
default:
|
default:
|
||||||
return await utils.log(
|
return await utils.log(
|
||||||
'Platform ' + os + ' is not supported',
|
'Platform ' + os_version + ' is not supported',
|
||||||
os,
|
os_version,
|
||||||
'error'
|
'error'
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|||||||
42
src/fetch.ts
42
src/fetch.ts
@@ -1,42 +0,0 @@
|
|||||||
/**
|
|
||||||
* Redirect status codes set for O(1) lookup
|
|
||||||
*/
|
|
||||||
const REDIRECT_CODES = new Set([301, 302, 303, 307, 308]);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Function to fetch a URL using native fetch API (Node 24+)
|
|
||||||
*
|
|
||||||
* @param input_url
|
|
||||||
* @param auth_token
|
|
||||||
* @param redirect_count
|
|
||||||
*/
|
|
||||||
export async function fetch(
|
|
||||||
input_url: string,
|
|
||||||
auth_token?: string,
|
|
||||||
redirect_count = 5
|
|
||||||
): Promise<Record<string, string>> {
|
|
||||||
const headers: Record<string, string> = {
|
|
||||||
'User-Agent': `Mozilla/5.0 (${process.platform} ${process.arch}) setup-php`
|
|
||||||
};
|
|
||||||
if (auth_token) {
|
|
||||||
headers['Authorization'] = 'Bearer ' + auth_token;
|
|
||||||
}
|
|
||||||
|
|
||||||
try {
|
|
||||||
const response = await globalThis.fetch(input_url, {
|
|
||||||
headers,
|
|
||||||
redirect: redirect_count > 0 ? 'follow' : 'manual'
|
|
||||||
});
|
|
||||||
|
|
||||||
if (response.ok) {
|
|
||||||
const data = await response.text();
|
|
||||||
return {data};
|
|
||||||
} else if (REDIRECT_CODES.has(response.status) && redirect_count <= 0) {
|
|
||||||
return {error: `${response.status}: Redirect error`};
|
|
||||||
} else {
|
|
||||||
return {error: `${response.status}: ${response.statusText}`};
|
|
||||||
}
|
|
||||||
} catch (error) {
|
|
||||||
return {error: `Fetch error: ${(error as Error).message}`};
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,8 +1,6 @@
|
|||||||
import path from 'path';
|
import {exec} from '@actions/exec/lib/exec';
|
||||||
import fs from 'fs';
|
import * as core from '@actions/core';
|
||||||
import {exec} from '@actions/exec';
|
|
||||||
import * as config from './config';
|
import * as config from './config';
|
||||||
import * as core from './core';
|
|
||||||
import * as coverage from './coverage';
|
import * as coverage from './coverage';
|
||||||
import * as extensions from './extensions';
|
import * as extensions from './extensions';
|
||||||
import * as tools from './tools';
|
import * as tools from './tools';
|
||||||
@@ -11,67 +9,64 @@ import * as utils from './utils';
|
|||||||
/**
|
/**
|
||||||
* Build the script
|
* Build the script
|
||||||
*
|
*
|
||||||
* @param os
|
* @param filename
|
||||||
|
* @param version
|
||||||
|
* @param os_version
|
||||||
*/
|
*/
|
||||||
export async function getScript(os: string): Promise<string> {
|
export async function getScript(
|
||||||
const url = 'https://setup-php.com/sponsor';
|
filename: string,
|
||||||
const filename = os + (await utils.scriptExtension(os));
|
version: string,
|
||||||
const script_path = path.join(__dirname, '../src/scripts', filename);
|
os_version: string
|
||||||
const run_path = script_path.replace(os, 'run');
|
): Promise<string> {
|
||||||
const extension_csv: string = utils.sanitizeShellInput(
|
const name = 'setup-php';
|
||||||
await utils.getInput('extensions', false),
|
const url = 'https://setup-php.com/support';
|
||||||
true
|
// taking inputs
|
||||||
);
|
process.env['fail_fast'] = await utils.getInput('fail-fast', false);
|
||||||
|
const extension_csv: string = await utils.getInput('extensions', false);
|
||||||
const ini_values_csv: string = await utils.getInput('ini-values', false);
|
const ini_values_csv: string = await utils.getInput('ini-values', false);
|
||||||
const coverage_driver: string = await utils.getInput('coverage', false);
|
const coverage_driver: string = await utils.getInput('coverage', false);
|
||||||
const tools_csv: string = await utils.getInput('tools', false);
|
const tools_csv: string = await utils.getInput('tools', false);
|
||||||
const version: string = await utils.parseVersion(
|
|
||||||
await utils.readPHPVersion()
|
let script: string = await utils.readScript(filename);
|
||||||
);
|
script += await tools.addTools(tools_csv, version, os_version);
|
||||||
const ini_file: string = await utils.parseIniFile(
|
|
||||||
await utils.getInput('ini-file', false)
|
|
||||||
);
|
|
||||||
let script = await utils.joins('.', script_path, `'${version}'`, ini_file);
|
|
||||||
if (extension_csv) {
|
if (extension_csv) {
|
||||||
script += await extensions.addExtension(extension_csv, version, os);
|
script += await extensions.addExtension(extension_csv, version, os_version);
|
||||||
}
|
}
|
||||||
script += await tools.addTools(tools_csv, version, os);
|
|
||||||
if (coverage_driver) {
|
if (coverage_driver) {
|
||||||
script += await coverage.addCoverage(coverage_driver, version, os);
|
script += await coverage.addCoverage(coverage_driver, version, os_version);
|
||||||
}
|
}
|
||||||
if (ini_values_csv) {
|
if (ini_values_csv) {
|
||||||
script += await config.addINIValues(ini_values_csv, os);
|
script += await config.addINIValues(ini_values_csv, os_version);
|
||||||
}
|
|
||||||
script += '\n' + (await utils.stepLog(`Sponsor setup-php`, os));
|
|
||||||
script += '\n' + (await utils.addLog('$tick', 'setup-php', url, os));
|
|
||||||
|
|
||||||
fs.writeFileSync(run_path, script, {mode: 0o755});
|
|
||||||
|
|
||||||
return run_path;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
script += '\n' + (await utils.stepLog('Support this project', os_version));
|
||||||
* Function to set environment variables based on inputs.
|
script += '\n' + (await utils.addLog('$tick', name, url, os_version));
|
||||||
*/
|
|
||||||
export async function setEnv(): Promise<void> {
|
return await utils.writeScript(filename, script);
|
||||||
process.env['fail_fast'] = await utils.getInput('fail-fast', false);
|
|
||||||
process.env['GITHUB_TOKEN'] ??= await utils.getInput('github-token', false);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Run the script
|
* Run the script
|
||||||
*/
|
*/
|
||||||
export async function run(): Promise<void> {
|
export async function run(): Promise<void> {
|
||||||
await setEnv();
|
try {
|
||||||
const os: string = process.platform;
|
const version: string = await utils.parseVersion(
|
||||||
const tool = await utils.scriptTool(os);
|
await utils.getInput('php-version', true)
|
||||||
const run_path = await getScript(os);
|
);
|
||||||
await exec(tool + run_path);
|
if (version) {
|
||||||
|
const os_version: string = process.platform;
|
||||||
|
const tool = await utils.scriptTool(os_version);
|
||||||
|
const script = os_version + (await utils.scriptExtension(os_version));
|
||||||
|
const location = await getScript(script, version, os_version);
|
||||||
|
await exec(await utils.joins(tool, location, version, __dirname));
|
||||||
|
} else {
|
||||||
|
core.setFailed('Unable to get the PHP version');
|
||||||
|
}
|
||||||
|
} catch (error) {
|
||||||
|
core.setFailed(error.message);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// call the run function
|
// call the run function
|
||||||
(async () => {
|
run();
|
||||||
await run();
|
|
||||||
})().catch(error => {
|
|
||||||
core.setFailed(error.message);
|
|
||||||
});
|
|
||||||
|
|||||||
@@ -1,37 +0,0 @@
|
|||||||
import * as cv from 'compare-versions';
|
|
||||||
import * as fetch from './fetch';
|
|
||||||
|
|
||||||
type RS = Record<string, string>;
|
|
||||||
type RSRS = Record<string, RS>;
|
|
||||||
|
|
||||||
export async function search(
|
|
||||||
package_name: string,
|
|
||||||
php_version: string
|
|
||||||
): Promise<string | null> {
|
|
||||||
const response = await fetch.fetch(
|
|
||||||
`https://repo.packagist.org/p2/${package_name}.json`
|
|
||||||
);
|
|
||||||
if (response.error || response.data === '[]') {
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
|
|
||||||
const data = JSON.parse(response['data']);
|
|
||||||
if (data && data.packages) {
|
|
||||||
const versions = data.packages[package_name];
|
|
||||||
versions.sort((a: RS, b: RS) => cv.compareVersions(b.version, a.version));
|
|
||||||
|
|
||||||
const result = versions.find((versionData: RSRS) => {
|
|
||||||
if (versionData?.require?.php) {
|
|
||||||
return versionData?.require?.php
|
|
||||||
.split('|')
|
|
||||||
.some(
|
|
||||||
require => require && cv.satisfies(php_version + '.0', require)
|
|
||||||
);
|
|
||||||
}
|
|
||||||
return false;
|
|
||||||
});
|
|
||||||
|
|
||||||
return result ? result.version : null;
|
|
||||||
}
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
269
src/scripts/common.sh
Normal file
269
src/scripts/common.sh
Normal file
@@ -0,0 +1,269 @@
|
|||||||
|
# Variables
|
||||||
|
export tick="✓"
|
||||||
|
export cross="✗"
|
||||||
|
export curl_opts=(-sL)
|
||||||
|
export old_versions="5.[3-5]"
|
||||||
|
export jit_versions="8.[0-9]"
|
||||||
|
export nightly_versions="8.[1-9]"
|
||||||
|
export xdebug3_versions="7.[2-4]|8.[0-9]"
|
||||||
|
export tool_path_dir="/usr/local/bin"
|
||||||
|
export composer_bin="$HOME/.composer/vendor/bin"
|
||||||
|
export composer_json="$HOME/.composer/composer.json"
|
||||||
|
export latest="releases/latest/download"
|
||||||
|
export github="https://github.com/shivammathur"
|
||||||
|
export bintray="https://dl.bintray/shivammathur"
|
||||||
|
|
||||||
|
# Function to log start of a operation.
|
||||||
|
step_log() {
|
||||||
|
message=$1
|
||||||
|
printf "\n\033[90;1m==> \033[0m\033[37;1m%s\033[0m\n" "$message"
|
||||||
|
}
|
||||||
|
|
||||||
|
# Function to log result of a operation.
|
||||||
|
add_log() {
|
||||||
|
mark=$1
|
||||||
|
subject=$2
|
||||||
|
message=$3
|
||||||
|
if [ "$mark" = "$tick" ]; then
|
||||||
|
printf "\033[32;1m%s \033[0m\033[34;1m%s \033[0m\033[90;1m%s\033[0m\n" "$mark" "$subject" "$message"
|
||||||
|
else
|
||||||
|
printf "\033[31;1m%s \033[0m\033[34;1m%s \033[0m\033[90;1m%s\033[0m\n" "$mark" "$subject" "$message"
|
||||||
|
[ "$fail_fast" = "true" ] && exit 1;
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
# Function to log result of installing extension.
|
||||||
|
add_extension_log() {
|
||||||
|
extension=$1
|
||||||
|
status=$2
|
||||||
|
extension_name=$(echo "$extension" | cut -d '-' -f 1)
|
||||||
|
(
|
||||||
|
check_extension "$extension_name" && add_log "$tick" "$extension_name" "$status"
|
||||||
|
) || add_log "$cross" "$extension_name" "Could not install $extension on PHP ${semver:?}"
|
||||||
|
}
|
||||||
|
|
||||||
|
# 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}"
|
||||||
|
[[ -z "${fail_fast}" ]] && fail_fast='false' || fail_fast="${fail_fast}"
|
||||||
|
}
|
||||||
|
|
||||||
|
# Function to download a file using cURL.
|
||||||
|
# mode: -s pipe to stdout, -v save file and return status code
|
||||||
|
# execute: -e save file as executable
|
||||||
|
get() {
|
||||||
|
mode=$1
|
||||||
|
execute=$2
|
||||||
|
file_path=$3
|
||||||
|
shift 3
|
||||||
|
links=("$@")
|
||||||
|
if [ "$mode" = "-s" ]; then
|
||||||
|
sudo curl "${curl_opts[@]}" "${links[0]}"
|
||||||
|
else
|
||||||
|
for link in "${links[@]}"; do
|
||||||
|
status_code=$(sudo curl -w "%{http_code}" -o "$file_path" "${curl_opts[@]}" "$link")
|
||||||
|
[ "$status_code" = "200" ] && break
|
||||||
|
done
|
||||||
|
[ "$execute" = "-e" ] && sudo chmod a+x "$file_path"
|
||||||
|
[ "$mode" = "-v" ] && echo "$status_code"
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
# Function to download and run scripts from GitHub releases with bintray fallback.
|
||||||
|
run_script() {
|
||||||
|
repo=$1
|
||||||
|
shift
|
||||||
|
args=("$@")
|
||||||
|
get -q -e /tmp/install.sh "$bintray/php/$repo.sh" "$github/$repo/$latest/install.sh"
|
||||||
|
bash /tmp/install.sh "${args[@]}"
|
||||||
|
}
|
||||||
|
|
||||||
|
# Function to install required packages on self-hosted runners.
|
||||||
|
self_hosted_setup() {
|
||||||
|
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_helper >/dev/null 2>&1
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
# Function to test if extension is loaded.
|
||||||
|
check_extension() {
|
||||||
|
extension=$1
|
||||||
|
if [ "$extension" != "mysql" ]; then
|
||||||
|
php -m | grep -i -q -w "$extension"
|
||||||
|
else
|
||||||
|
php -m | grep -i -q "$extension"
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
# Function to enable existing extensions.
|
||||||
|
enable_extension() {
|
||||||
|
modules_dir="/var/lib/php/modules/$version"
|
||||||
|
[ -d "$modules_dir" ] && sudo find "$modules_dir" -path "*disabled*$1" -delete
|
||||||
|
if ! check_extension "$1" && [ -e "${ext_dir:?}/$1.so" ]; then
|
||||||
|
echo "$2=${ext_dir:?}/$1.so" | sudo tee -a "${pecl_file:-${ini_file[@]}}" >/dev/null
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
# Function to configure PHP
|
||||||
|
configure_php() {
|
||||||
|
(
|
||||||
|
echo -e "date.timezone=UTC\nmemory_limit=-1"
|
||||||
|
[[ "$version" =~ $jit_versions ]] && echo -e "opcache.enable=1\nopcache.jit_buffer_size=256M\nopcache.jit=1235"
|
||||||
|
[[ "$version" =~ $xdebug3_versions ]] && echo -e "xdebug.mode=coverage"
|
||||||
|
) | sudo tee -a "${pecl_file:-${ini_file[@]}}" >/dev/null
|
||||||
|
}
|
||||||
|
|
||||||
|
# Function to configure PECL.
|
||||||
|
configure_pecl() {
|
||||||
|
if ! [ -e /tmp/pecl_config ]; then
|
||||||
|
if ! command -v pecl >/dev/null || ! command -v pear >/dev/null; then
|
||||||
|
add_pecl >/dev/null 2>&1
|
||||||
|
fi
|
||||||
|
for script in pear pecl; do
|
||||||
|
sudo "$script" config-set php_ini "${pecl_file:-${ini_file[@]}}"
|
||||||
|
sudo "$script" channel-update "$script".php.net
|
||||||
|
done
|
||||||
|
echo '' | sudo tee /tmp/pecl_config >/dev/null 2>&1
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
# Function to get the PECL version of an extension.
|
||||||
|
get_pecl_version() {
|
||||||
|
extension=$1
|
||||||
|
stability="$(echo "$2" | grep -m 1 -Eio "(stable|alpha|beta|rc|snapshot|preview)")"
|
||||||
|
pecl_rest='https://pecl.php.net/rest/r/'
|
||||||
|
response=$(get -s -n "" "$pecl_rest$extension"/allreleases.xml)
|
||||||
|
pecl_version=$(echo "$response" | grep -m 1 -Eio "([0-9]+\.[0-9]+\.[0-9]+${stability}[0-9]+)")
|
||||||
|
if [ ! "$pecl_version" ]; then
|
||||||
|
pecl_version=$(echo "$response" | grep -m 1 -Eo "([0-9]+\.[0-9]+\.[0-9]+)")
|
||||||
|
fi
|
||||||
|
echo "$pecl_version"
|
||||||
|
}
|
||||||
|
|
||||||
|
# Function to install PECL extensions and accept default options
|
||||||
|
pecl_install() {
|
||||||
|
local extension=$1
|
||||||
|
configure_pecl >/dev/null 2>&1
|
||||||
|
yes '' 2>/dev/null | sudo pecl install -f "$extension" >/dev/null 2>&1
|
||||||
|
}
|
||||||
|
|
||||||
|
# Function to setup pre-release extensions using PECL.
|
||||||
|
add_unstable_extension() {
|
||||||
|
extension=$1
|
||||||
|
stability=$2
|
||||||
|
prefix=$3
|
||||||
|
pecl_version=$(get_pecl_version "$extension" "$stability")
|
||||||
|
add_pecl_extension "$extension" "$pecl_version" "$prefix"
|
||||||
|
}
|
||||||
|
|
||||||
|
# Function to extract tool version.
|
||||||
|
get_tool_version() {
|
||||||
|
tool=$1
|
||||||
|
param=$2
|
||||||
|
version_regex="[0-9]+((\.{1}[0-9]+)+)(\.{0})(-[a-zA-Z0-9]+){0,1}"
|
||||||
|
if [ "$tool" = "composer" ]; then
|
||||||
|
if [ "$param" != "snapshot" ]; then
|
||||||
|
composer_version="$(grep -Ea "const\sVERSION" "$tool_path_dir/composer" | grep -Eo "$version_regex")"
|
||||||
|
else
|
||||||
|
composer_version="$(grep -Ea "const\sBRANCH_ALIAS_VERSION" "$tool_path_dir/composer" | grep -Eo "$version_regex")+$(grep -Ea "const\sVERSION" "$tool_path_dir/composer" | grep -Eo "[a-zA-z0-9]+" | tail -n 1)"
|
||||||
|
fi
|
||||||
|
echo "$composer_version" | sudo tee /tmp/composer_version
|
||||||
|
else
|
||||||
|
$tool "$param" 2>/dev/null | sed -Ee "s/[Cc]omposer(.)?$version_regex//g" | grep -Eo "$version_regex" | head -n 1
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
# 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 config -g process-timeout 0
|
||||||
|
echo "$composer_bin" >> "$GITHUB_PATH"
|
||||||
|
if [ -n "$COMPOSER_TOKEN" ]; then
|
||||||
|
composer -q config -g github-oauth.github.com "$COMPOSER_TOKEN"
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
# Function to setup a remote tool.
|
||||||
|
add_tool() {
|
||||||
|
url=$1
|
||||||
|
tool=$2
|
||||||
|
ver_param=$3
|
||||||
|
tool_path="$tool_path_dir/$tool"
|
||||||
|
if ! [[ "$PATH" =~ $tool_path_dir ]] ; then
|
||||||
|
export PATH=$PATH:"$tool_path_dir"
|
||||||
|
echo "export PATH=\$PATH:$tool_path_dir" | sudo tee -a "$GITHUB_ENV" >/dev/null
|
||||||
|
fi
|
||||||
|
if [ ! -e "$tool_path" ]; then
|
||||||
|
rm -rf "$tool_path"
|
||||||
|
fi
|
||||||
|
IFS="," read -r -a url <<< "$url"
|
||||||
|
status_code=$(get -v -e "$tool_path" "${url[@]}")
|
||||||
|
if [ "$status_code" != "200" ] && [[ "${url[0]}" =~ .*github.com.*releases.*latest.* ]]; then
|
||||||
|
url[0]="${url[0]//releases\/latest\/download/releases/download/$(get -s -n "" "$(echo "${url[0]}" | cut -d '/' -f '1-5')/releases" | grep -Eo -m 1 "([0-9]+\.[0-9]+\.[0-9]+)/$(echo "${url[0]}" | sed -e "s/.*\///")" | cut -d '/' -f 1)}"
|
||||||
|
status_code=$(get -v -e "$tool_path" "${url[0]}")
|
||||||
|
fi
|
||||||
|
if [ "$status_code" = "200" ]; then
|
||||||
|
if [ "$tool" = "composer" ]; then
|
||||||
|
configure_composer "$tool_path"
|
||||||
|
elif [ "$tool" = "cs2pr" ]; then
|
||||||
|
sudo sed -i 's/\r$//; s/exit(9)/exit(0)/' "$tool_path" 2>/dev/null ||
|
||||||
|
sudo sed -i '' 's/\r$//; s/exit(9)/exit(0)/' "$tool_path"
|
||||||
|
elif [ "$tool" = "phan" ]; then
|
||||||
|
add_extension fileinfo extension >/dev/null 2>&1
|
||||||
|
add_extension ast extension >/dev/null 2>&1
|
||||||
|
elif [ "$tool" = "phive" ]; then
|
||||||
|
add_extension curl extension >/dev/null 2>&1
|
||||||
|
add_extension mbstring extension >/dev/null 2>&1
|
||||||
|
add_extension xml extension >/dev/null 2>&1
|
||||||
|
elif [ "$tool" = "wp-cli" ]; then
|
||||||
|
sudo cp -p "$tool_path" "$tool_path_dir"/wp
|
||||||
|
fi
|
||||||
|
tool_version=$(get_tool_version "$tool" "$ver_param")
|
||||||
|
add_log "$tick" "$tool" "Added $tool $tool_version"
|
||||||
|
else
|
||||||
|
add_log "$cross" "$tool" "Could not setup $tool"
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
# Function to setup a tool using composer.
|
||||||
|
add_composertool() {
|
||||||
|
tool=$1
|
||||||
|
release=$2
|
||||||
|
prefix=$3
|
||||||
|
if [[ "$tool" =~ prestissimo|composer-prefetcher ]]; then
|
||||||
|
composer_version=$(cat /tmp/composer_version)
|
||||||
|
if [ "$(echo "$composer_version" | cut -d'.' -f 1)" != "1" ]; then
|
||||||
|
echo "::warning:: Skipping $tool, as it does not support Composer $composer_version. Specify composer:v1 in tools to use $tool"
|
||||||
|
add_log "$cross" "$tool" "Skipped"
|
||||||
|
return
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
(
|
||||||
|
composer global require "$prefix$release" >/dev/null 2>&1 &&
|
||||||
|
json=$(grep "$prefix$tool" "$composer_json") &&
|
||||||
|
tool_version=$(get_tool_version 'echo' "$json") &&
|
||||||
|
add_log "$tick" "$tool" "Added $tool $tool_version"
|
||||||
|
) || add_log "$cross" "$tool" "Could not setup $tool"
|
||||||
|
if [ -e "$composer_bin/composer" ]; then
|
||||||
|
sudo cp -p "$tool_path_dir/composer" "$composer_bin"
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
# Function to get PHP version in semver format.
|
||||||
|
php_semver() {
|
||||||
|
php"$version" -v | grep -Eo -m 1 "[0-9]+\.[0-9]+\.[0-9]+" | head -n 1
|
||||||
|
}
|
||||||
@@ -1,73 +1,68 @@
|
|||||||
# Handle dependency extensions
|
# Function to setup environment for self-hosted runners.
|
||||||
handle_dependency_extensions() {
|
self_hosted_helper() {
|
||||||
local formula=$1
|
if ! command -v brew >/dev/null; then
|
||||||
local extension=$2
|
step_log "Setup Brew"
|
||||||
formula_file="${tap_dir:?}/$ext_tap/Formula/$extension@${version:?}.rb"
|
get -q -e "/tmp/install.sh" "https://raw.githubusercontent.com/Homebrew/install/master/install.sh" && /tmp/install.sh >/dev/null 2>&1
|
||||||
[ -e "$formula_file" ] || formula_file="$tap_dir/$ext_tap/Formula/$formula@$version.rb"
|
add_log "${tick:?}" "Brew" "Installed Homebrew"
|
||||||
if [ -e "$formula_file" ]; then
|
|
||||||
IFS=" " read -r -a dependency_extensions <<< "$(grep -Eo "shivammathur.*@" "$formula_file" | xargs -I {} -n 1 basename '{}' | cut -d '@' -f 1 | tr '\n' ' ')"
|
|
||||||
for dependency_extension in "${dependency_extensions[@]}"; do
|
|
||||||
sudo sed -Ei '' "/=(.*\/)?\"?$dependency_extension(.so)?$/d" "${ini_file:?}"
|
|
||||||
done
|
|
||||||
fi
|
|
||||||
suffix="$(get_php_formula_suffix)"
|
|
||||||
if [[ -n "$suffix" ]]; then
|
|
||||||
brew_opts=(-sf)
|
|
||||||
patch_abstract_file >/dev/null 2>&1
|
|
||||||
for dependency_extension in "${dependency_extensions[@]}"; do
|
|
||||||
safe_brew install --skip-link "${brew_opts[@]}" "$ext_tap/$dependency_extension@$version" >/dev/null 2>&1 &&
|
|
||||||
brew link --overwrite --force "$dependency_extension@$version" >/dev/null 2>&1 &&
|
|
||||||
copy_brew_extensions "$dependency_extension"
|
|
||||||
done
|
|
||||||
fi
|
fi
|
||||||
}
|
}
|
||||||
|
|
||||||
# Helper function to disable an extension.
|
# Function to remove extensions.
|
||||||
disable_extension_helper() {
|
remove_extension() {
|
||||||
local extension=$1
|
extension=$1
|
||||||
local disable_dependents=${2:-false}
|
if check_extension "$extension"; then
|
||||||
get_extension_map
|
|
||||||
if [ "$disable_dependents" = "true" ]; then
|
|
||||||
disable_extension_dependents "$extension"
|
|
||||||
fi
|
|
||||||
sudo sed -Ei '' "/=(.*\/)?\"?$extension(.so)?$/d" "${ini_file:?}"
|
sudo sed -Ei '' "/=(.*\/)?\"?$extension(.so)?$/d" "${ini_file:?}"
|
||||||
sudo rm -rf "$scan_dir"/*"$extension"* /tmp/php"$version"_extensions
|
sudo rm -rf "${scan_dir:?}"/*"$extension"* "${ext_dir:?}"/"$extension".so >/dev/null 2>&1
|
||||||
mkdir -p /tmp/extdisabled/"$version"
|
(! check_extension "$extension" && add_log "${tick:?}" ":$extension" "Removed") ||
|
||||||
echo '' | sudo tee /tmp/extdisabled/"$version"/"$extension" >/dev/null 2>&1
|
add_log "${cross:?}" ":$extension" "Could not remove $extension on PHP ${semver:?}"
|
||||||
}
|
|
||||||
|
|
||||||
# Function to get extension name from brew formula.
|
|
||||||
get_extension_from_formula() {
|
|
||||||
local formula=$1
|
|
||||||
local extension
|
|
||||||
extension=$(grep -E "^$formula=" "$src"/configs/brew_extensions | cut -d '=' -f 2)
|
|
||||||
[[ -z "$extension" ]] && extension="$(echo "$formula" | sed -E "s/pecl_|php|[0-9]//g")"
|
|
||||||
echo "$extension"
|
|
||||||
}
|
|
||||||
|
|
||||||
# Function to get renamed formula.
|
|
||||||
get_renamed_formula() {
|
|
||||||
local formula=$1
|
|
||||||
formula_renames_json="$tap_dir/$ext_tap/formula_renames.json"
|
|
||||||
if [ -e "$formula_renames_json" ] && grep -q "$formula@$version\":" "$formula_renames_json"; then
|
|
||||||
grep "$formula@$version\":" "$formula_renames_json" | cut -d ':' -f 2 | tr -d ' ",' | cut -d '@' -f 1
|
|
||||||
else
|
else
|
||||||
echo "$formula"
|
add_log "${tick:?}" ":$extension" "Could not find $extension on PHP $semver"
|
||||||
fi
|
fi
|
||||||
}
|
}
|
||||||
|
|
||||||
# Function to copy extension binaries to the extension directory.
|
# Function to install a specific version of PECL extension.
|
||||||
copy_brew_extensions() {
|
add_pecl_extension() {
|
||||||
local formula=$1
|
extension=$1
|
||||||
formula_file="$tap_dir/$ext_tap/Formula/$formula@$version.rb"
|
pecl_version=$2
|
||||||
deps="$(grep -Eo 'depends_on "shivammathur[^"]+' "$formula_file" | cut -d '/' -f 3 | tr '\n' ' ')"
|
prefix=$3
|
||||||
IFS=' ' read -r -a deps <<< "$formula@$version $deps"
|
enable_extension "$extension" "$prefix"
|
||||||
for dependency in "${deps[@]}"; do
|
if [[ $pecl_version =~ .*(alpha|beta|rc|snapshot|preview).* ]]; then
|
||||||
extension_file="${brew_prefix:?}/opt/$dependency/$(get_extension_from_formula "${dependency%@*}").so"
|
pecl_version=$(get_pecl_version "$extension" "$pecl_version")
|
||||||
[ -e "$extension_file" ] && sudo cp "$extension_file" "$ext_dir"
|
fi
|
||||||
done
|
ext_version=$(php -r "echo phpversion('$extension');")
|
||||||
if [ -d "$brew_prefix"/Cellar/"$formula"@"$version" ]; then
|
if [ "$ext_version" = "$pecl_version" ]; then
|
||||||
sudo find -- "$brew_prefix"/Cellar/"$formula"@"$version" -name "*.dylib" -exec cp {} "$ext_dir" \;
|
add_log "${tick:?}" "$extension" "Enabled"
|
||||||
|
else
|
||||||
|
remove_extension "$extension" >/dev/null 2>&1
|
||||||
|
pecl_install "$extension-$pecl_version"
|
||||||
|
add_extension_log "$extension-$pecl_version" "Installed and enabled"
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
# Function to fetch a brew tap
|
||||||
|
fetch_brew_tap() {
|
||||||
|
tap=$1
|
||||||
|
tap_user=$(dirname "$tap")
|
||||||
|
tap_name=$(basename "$tap")
|
||||||
|
mkdir -p "$tap_dir/$tap_user"
|
||||||
|
get -s -n "" "https://github.com/$tap/archive/master.tar.gz" | sudo tar -xzf - -C "$tap_dir/$tap_user"
|
||||||
|
if [ -d "$tap_dir/$tap_user/$tap_name-master" ]; then
|
||||||
|
sudo mv "$tap_dir/$tap_user/$tap_name-master" "$tap_dir/$tap_user/$tap_name"
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
# Function to add a brew tap.
|
||||||
|
add_brew_tap() {
|
||||||
|
tap=$1
|
||||||
|
if ! [ -d "$tap_dir/$tap" ]; then
|
||||||
|
if [ "${runner:?}" = "self-hosted" ]; then
|
||||||
|
brew tap --shallow "$tap" >/dev/null 2>&1
|
||||||
|
else
|
||||||
|
fetch_brew_tap "$tap" >/dev/null 2>&1
|
||||||
|
if ! [ -d "$tap_dir/$tap" ]; then
|
||||||
|
brew tap --shallow "$tap" >/dev/null 2>&1
|
||||||
|
fi
|
||||||
|
fi
|
||||||
fi
|
fi
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -75,45 +70,33 @@ copy_brew_extensions() {
|
|||||||
add_brew_extension() {
|
add_brew_extension() {
|
||||||
formula=$1
|
formula=$1
|
||||||
prefix=$2
|
prefix=$2
|
||||||
extension="$(get_extension_from_formula "$formula")"
|
extension=${formula//[0-9]/}
|
||||||
enable_extension "$extension" "$prefix"
|
enable_extension "$extension" "$prefix"
|
||||||
if check_extension "$extension"; then
|
if check_extension "$extension"; then
|
||||||
add_log "${tick:?}" "$extension" "Enabled"
|
add_log "${tick:?}" "$extension" "Enabled"
|
||||||
else
|
else
|
||||||
add_brew_tap "$php_tap"
|
add_brew_tap shivammathur/homebrew-php
|
||||||
add_brew_tap "$ext_tap"
|
add_brew_tap shivammathur/homebrew-extensions
|
||||||
formula="$(get_renamed_formula "$formula")"
|
sudo mv "$tap_dir"/shivammathur/homebrew-extensions/.github/deps/"$extension"/* "$tap_dir/homebrew/homebrew-core/Formula/" 2>/dev/null || true
|
||||||
update_dependencies >/dev/null 2>&1
|
brew install "$formula@$version" >/dev/null 2>&1
|
||||||
handle_dependency_extensions "$formula" "$extension" >/dev/null 2>&1
|
sudo cp "$brew_prefix/opt/$formula@$version/$extension.so" "$ext_dir"
|
||||||
(
|
|
||||||
safe_brew install --skip-link "${brew_opts[@]}" "$ext_tap/$formula@$version" >/dev/null 2>&1 &&
|
|
||||||
brew link --overwrite --force "$formula@$version" >/dev/null 2>&1 &&
|
|
||||||
copy_brew_extensions "$formula"
|
|
||||||
) || pecl_install "$extension" >/dev/null 2>&1
|
|
||||||
add_extension_log "$extension" "Installed and enabled"
|
add_extension_log "$extension" "Installed and enabled"
|
||||||
fi
|
fi
|
||||||
}
|
}
|
||||||
|
|
||||||
# Function to patch the abstract file in the extensions tap.
|
# Function to setup extensions
|
||||||
patch_abstract_file() {
|
add_extension() {
|
||||||
abstract_path="$tap_dir"/"$ext_tap"/Abstract/abstract-php-extension.rb
|
extension=$1
|
||||||
if [[ -e "$abstract_path" && ! -e /tmp/abstract_patch ]]; then
|
|
||||||
echo '' | sudo tee /tmp/abstract_patch >/dev/null 2>&1
|
|
||||||
sudo sed -i '' -e "s|php@#{\(.*\)}|php@#{\1}$suffix|g" -e "s|php_version /|\"#{php_version}$suffix\" /|g" "$abstract_path"
|
|
||||||
fi
|
|
||||||
}
|
|
||||||
|
|
||||||
# Helper function to add an extension.
|
|
||||||
add_extension_helper() {
|
|
||||||
local extension=$1
|
|
||||||
prefix=$2
|
prefix=$2
|
||||||
if [[ "$version" =~ ${old_versions:?} ]] && [ "$extension" = "imagick" ]; then
|
enable_extension "$extension" "$prefix"
|
||||||
run_script "php5-darwin" "${version/./}" "$extension" >/dev/null 2>&1
|
if check_extension "$extension"; then
|
||||||
|
add_log "${tick:?}" "$extension" "Enabled"
|
||||||
else
|
else
|
||||||
|
[[ "$version" =~ 5.[4-5] ]] && [ "$extension" = "imagick" ] && brew install pkg-config imagemagick >/dev/null 2>&1
|
||||||
pecl_install "$extension" >/dev/null 2>&1 &&
|
pecl_install "$extension" >/dev/null 2>&1 &&
|
||||||
if [[ "$version" =~ ${old_versions:?} ]]; then echo "$prefix=$ext_dir/$extension.so" >>"$ini_file"; fi
|
if [[ "$version" =~ ${old_versions:?} ]]; then echo "$prefix=$ext_dir/$extension.so" >>"$ini_file"; fi
|
||||||
fi
|
|
||||||
add_extension_log "$extension" "Installed and enabled"
|
add_extension_log "$extension" "Installed and enabled"
|
||||||
|
fi
|
||||||
}
|
}
|
||||||
|
|
||||||
# Function to handle request to add phpize and php-config.
|
# Function to handle request to add phpize and php-config.
|
||||||
@@ -124,188 +107,79 @@ add_devtools() {
|
|||||||
|
|
||||||
# Function to handle request to add PECL.
|
# Function to handle request to add PECL.
|
||||||
add_pecl() {
|
add_pecl() {
|
||||||
enable_extension xml extension >/dev/null 2>&1
|
pecl_version=$(get_tool_version "pecl" "version")
|
||||||
configure_pecl >/dev/null 2>&1
|
add_log "${tick:?}" "PECL" "Found PECL $pecl_version"
|
||||||
pear_version=$(get_tool_version "pecl" "version")
|
|
||||||
add_log "${tick:?}" "PECL" "Found PECL $pear_version"
|
|
||||||
}
|
|
||||||
|
|
||||||
# Link opcache extension to extensions directory.
|
|
||||||
link_opcache() {
|
|
||||||
opcache_ini="$brew_prefix"/etc/php/"$version"/conf.d/ext-opcache.ini
|
|
||||||
if [ -e "$opcache_ini" ]; then
|
|
||||||
opcache_ext=$(grep -Eo "zend_extension.*opcache.*\.so" "$opcache_ini" | cut -d '"' -f 2)
|
|
||||||
sudo ln -sf "$opcache_ext" "$ext_dir"
|
|
||||||
fi
|
|
||||||
}
|
|
||||||
|
|
||||||
# Patch brew to overwrite packages.
|
|
||||||
patch_brew() {
|
|
||||||
formula_installer="${brew_repo:?}"/Library/Homebrew/formula_installer.rb
|
|
||||||
code=" keg.link\(verbose: verbose\?"
|
|
||||||
sudo sed -Ei '' "s/$code.*/$code, overwrite: true\)/" "$formula_installer"
|
|
||||||
# shellcheck disable=SC2064
|
|
||||||
trap "sudo sed -Ei '' 's/$code.*/$code, overwrite: overwrite?\)/' $formula_installer" exit
|
|
||||||
}
|
}
|
||||||
|
|
||||||
# Function to update dependencies.
|
# Function to update dependencies.
|
||||||
update_dependencies() {
|
update_dependencies() {
|
||||||
patch_brew
|
if [[ "$version" =~ ${nightly_versions:?} ]] && [ "${runner:?}" != "self-hosted" ] && [ "${ImageOS:-}" != "" ] && [ "${ImageVersion:-}" != "" ]; then
|
||||||
if ! [ -e /tmp/update_dependencies ]; then
|
while read -r formula; do
|
||||||
for repo in "$brew_repo" "${core_repo:?}"; do
|
get -q -n "$tap_dir/homebrew/homebrew-core/Formula/$formula.rb" "https://raw.githubusercontent.com/Homebrew/homebrew-core/master/Formula/$formula.rb" &
|
||||||
if [ -e "$repo" ]; then
|
to_wait+=($!)
|
||||||
git_retry -C "$repo" fetch origin main && git -C "$repo" reset --hard origin/main
|
done <"$tap_dir/shivammathur/homebrew-php/.github/deps/${ImageOS:?}_${ImageVersion:?}"
|
||||||
fi
|
wait "${to_wait[@]}"
|
||||||
done
|
|
||||||
echo '' | sudo tee /tmp/update_dependencies >/dev/null 2>&1
|
|
||||||
fi
|
|
||||||
}
|
|
||||||
|
|
||||||
# Function to get PHP version if it is already installed using Homebrew.
|
|
||||||
get_brewed_php() {
|
|
||||||
cellar="$brew_prefix"/Cellar
|
|
||||||
php_cellar="$cellar"/php
|
|
||||||
if [ -d "$cellar" ] && ! [[ "$(find "$cellar" -maxdepth 1 -name "php@$version*" | wc -l 2>/dev/null)" -eq 0 ]]; then
|
|
||||||
php_semver
|
|
||||||
elif [ -d "$php_cellar" ] && ! [[ "$(find "$php_cellar" -maxdepth 1 -name "$version*" | wc -l 2>/dev/null)" -eq 0 ]]; then
|
|
||||||
php_semver
|
|
||||||
else
|
|
||||||
echo 'false';
|
|
||||||
fi
|
fi
|
||||||
|
# Remove once commit with bottle syntax breaking change is in images
|
||||||
|
git -C "$brew_repo" pull origin master
|
||||||
}
|
}
|
||||||
|
|
||||||
# Function to setup PHP 5.6 and newer using Homebrew.
|
# Function to setup PHP 5.6 and newer using Homebrew.
|
||||||
add_php() {
|
add_php() {
|
||||||
action=$1
|
action=$1
|
||||||
existing_version=$2
|
add_brew_tap shivammathur/homebrew-php
|
||||||
suffix="$(get_php_formula_suffix)"
|
|
||||||
php_keg="php@$version$suffix"
|
|
||||||
php_formula="shivammathur/php/$php_keg"
|
|
||||||
if [[ "$existing_version" = "false" || -n "$suffix" || "$action" = "upgrade" ]]; then
|
|
||||||
update_dependencies
|
update_dependencies
|
||||||
add_brew_tap "$php_tap"
|
if ! [[ "$(find "$(brew --cellar)"/php/ -maxdepth 1 -name "$version*" | wc -l 2>/dev/null)" -eq 0 ]] && [ "$action" != "upgrade" ]; then
|
||||||
fi
|
brew unlink shivammathur/php/php@"$version"
|
||||||
if [[ "$existing_version" != "false" && -z "$suffix" ]]; then
|
|
||||||
if [ "$action" = "upgrade" ]; then
|
|
||||||
safe_brew install --only-dependencies "$php_formula"
|
|
||||||
safe_brew upgrade -f --overwrite "$php_formula"
|
|
||||||
else
|
else
|
||||||
brew unlink "$php_keg"
|
brew upgrade "shivammathur/php/php@$version" 2>/dev/null || brew install "shivammathur/php/php@$version"
|
||||||
fi
|
fi
|
||||||
else
|
brew link --force --overwrite shivammathur/php/php@"$version"
|
||||||
safe_brew install --only-dependencies "$php_formula"
|
|
||||||
safe_brew install --skip-link -f --overwrite "$php_formula" 2>/dev/null || safe_brew upgrade -f --overwrite "$php_formula"
|
|
||||||
fi
|
|
||||||
brew link --force --overwrite "$php_keg" || (sudo chown -R "$(id -un)":"$(id -gn)" "$brew_prefix" && brew link --force --overwrite "$php_keg")
|
|
||||||
}
|
}
|
||||||
|
|
||||||
# Function to get formula suffix
|
# Function to Setup PHP
|
||||||
get_php_formula_suffix() {
|
|
||||||
local suffix
|
|
||||||
[ "${debug:?}" = "debug" ] && suffix="-debug"
|
|
||||||
[ "${ts:?}" = "zts" ] && suffix="$suffix-zts"
|
|
||||||
echo "$suffix"
|
|
||||||
}
|
|
||||||
|
|
||||||
# Function to get extra version.
|
|
||||||
php_extra_version() {
|
|
||||||
php_formula_file="$tap_dir"/"$php_tap"/Formula/php@"$version".rb
|
|
||||||
if [ -e "$php_formula_file" ] && ! grep -q "deprecate!" "$php_formula_file" && grep -Eq "archive/[0-9a-zA-Z]+" "$php_formula_file"; then
|
|
||||||
echo " ($(grep -Eo "archive/[0-9a-zA-Z]+" "$php_formula_file" | cut -d'/' -f 2))"
|
|
||||||
fi
|
|
||||||
}
|
|
||||||
|
|
||||||
# Function to set php.ini
|
|
||||||
add_php_config() {
|
|
||||||
if ! [ -e "$ini_dir"/php.ini-development ]; then
|
|
||||||
sudo cp "$ini_dir"/php.ini "$ini_dir"/php.ini-development
|
|
||||||
fi
|
|
||||||
if [[ "$ini" = "production" || "$ini" = "development" ]]; then
|
|
||||||
sudo cp "$ini_dir"/php.ini-"$ini" "$ini_dir"/php.ini
|
|
||||||
elif [ "$ini" = "none" ]; then
|
|
||||||
echo '' | sudo tee "${ini_file[@]}" >/dev/null 2>&1
|
|
||||||
fi
|
|
||||||
}
|
|
||||||
|
|
||||||
# Function to get scan directory.
|
|
||||||
get_scan_dir() {
|
|
||||||
if [[ "$version" =~ ${old_versions:?} ]]; then
|
|
||||||
php --ini | grep additional | sed -e "s|.*: s*||"
|
|
||||||
else
|
|
||||||
echo "$ini_dir"/conf.d
|
|
||||||
fi
|
|
||||||
}
|
|
||||||
|
|
||||||
# Function to handle self-hosted runner setup.
|
|
||||||
self_hosted_helper() {
|
|
||||||
sudo mkdir -p /opt/hostedtoolcache >/dev/null 2>&1 || true
|
|
||||||
}
|
|
||||||
|
|
||||||
# Function to Setup PHP.
|
|
||||||
setup_php() {
|
setup_php() {
|
||||||
step_log "Setup PHP"
|
step_log "Setup PHP"
|
||||||
php_config="$(command -v php-config 2>/dev/null)"
|
existing_version=$(php-config --version 2>/dev/null | cut -c 1-3)
|
||||||
update=true
|
|
||||||
check_pre_installed
|
|
||||||
existing_version=$(get_brewed_php)
|
|
||||||
status="Found"
|
|
||||||
if [[ "$version" =~ ${old_versions:?} ]]; then
|
if [[ "$version" =~ ${old_versions:?} ]]; then
|
||||||
run_script "php5-darwin" "${version/./}" >/dev/null 2>&1
|
run_script "php5-darwin" "${version/./}" >/dev/null 2>&1
|
||||||
status="Installed"
|
status="Installed"
|
||||||
elif [ "${existing_version:0:3}" != "$version" ]; then
|
elif [ "$existing_version" != "$version" ]; then
|
||||||
add_php "install" "$existing_version" >/dev/null 2>&1
|
add_php "install" >/dev/null 2>&1
|
||||||
status="Installed"
|
status="Installed"
|
||||||
elif [[ "${existing_version:0:3}" = "$version" && "${update:?}" = "true" ]]; then
|
elif [ "$existing_version" = "$version" ] && [ "${update:?}" = "true" ]; then
|
||||||
brew_php_version="$(brew info --json "php@$version" 2>/dev/null | jq -r '.[].versions.stable')"
|
add_php "upgrade" >/dev/null 2>&1
|
||||||
if [ "$brew_php_version" != "$existing_version" ]; then
|
status="Updated to"
|
||||||
add_php "upgrade" "$existing_version" >/dev/null 2>&1
|
else
|
||||||
status="Upgraded"
|
status="Found"
|
||||||
fi
|
fi
|
||||||
fi
|
ini_file=$(php -d "date.timezone=UTC" --ini | grep "Loaded Configuration" | sed -e "s|.*:s*||" | sed "s/ //g")
|
||||||
php_config="$(command -v php-config)"
|
|
||||||
ext_dir="$(sed -n "s/.*extension_dir=['\"]\(.*\)['\"].*/\1/p" "$php_config")"
|
|
||||||
ini_dir="$(php_ini_path)"
|
|
||||||
scan_dir="$(get_scan_dir)"
|
|
||||||
ini_file="$ini_dir"/php.ini
|
|
||||||
sudo mkdir -m 777 -p "$ext_dir" "$HOME/.composer"
|
|
||||||
sudo chmod 777 "$ini_file" "${tool_path_dir:?}"
|
sudo chmod 777 "$ini_file" "${tool_path_dir:?}"
|
||||||
semver="$(php_semver)"
|
|
||||||
extra_version="$(php_extra_version)"
|
|
||||||
configure_php
|
configure_php
|
||||||
link_opcache
|
ext_dir=$(php -i | grep -Ei "extension_dir => /" | sed -e "s|.*=> s*||")
|
||||||
set_output "php-version" "$semver"
|
scan_dir=$(php --ini | grep additional | sed -e "s|.*: s*||")
|
||||||
|
sudo mkdir -m 777 -p "$ext_dir" "$HOME/.composer"
|
||||||
|
semver=$(php -v | head -n 1 | cut -f 2 -d ' ')
|
||||||
if [ "${semver%.*}" != "$version" ]; then
|
if [ "${semver%.*}" != "$version" ]; then
|
||||||
add_log "${cross:?}" "PHP" "Could not setup PHP $version"
|
add_log "$cross" "PHP" "Could not setup PHP $version"
|
||||||
exit 1
|
exit 1
|
||||||
fi
|
fi
|
||||||
|
sudo cp "$dist"/../src/configs/*.json "$RUNNER_TOOL_CACHE/"
|
||||||
sudo cp "$src"/configs/pm/*.json "$RUNNER_TOOL_CACHE/"
|
add_log "$tick" "PHP" "$status PHP $semver"
|
||||||
add_log "$tick" "PHP" "$status PHP $semver$extra_version"
|
|
||||||
}
|
}
|
||||||
|
|
||||||
# Variables
|
# Variables
|
||||||
version=${1:-'8.5'}
|
version=$1
|
||||||
ini=${2:-'production'}
|
dist=$2
|
||||||
src=${0%/*}/..
|
brew_prefix="$(brew --prefix)"
|
||||||
php_formula=shivammathur/php/php@"$version"
|
brew_repo="$(brew --repository)"
|
||||||
scripts="$src"/scripts
|
tap_dir="$brew_repo"/Library/Taps
|
||||||
ext_tap=shivammathur/homebrew-extensions
|
|
||||||
php_tap=shivammathur/homebrew-php
|
|
||||||
export HOMEBREW_CHANGE_ARCH_TO_ARM=1
|
export HOMEBREW_CHANGE_ARCH_TO_ARM=1
|
||||||
export HOMEBREW_NO_AUTO_UPDATE=1
|
|
||||||
export HOMEBREW_NO_ENV_HINTS=1
|
|
||||||
export HOMEBREW_NO_INSTALL_CLEANUP=1
|
export HOMEBREW_NO_INSTALL_CLEANUP=1
|
||||||
export HOMEBREW_NO_INSTALLED_DEPENDENTS_CHECK=1
|
export HOMEBREW_NO_AUTO_UPDATE=1
|
||||||
export HOMEBREW_NO_INSTALL_FROM_API=1
|
|
||||||
|
|
||||||
# shellcheck source=.
|
# shellcheck source=.
|
||||||
. "${scripts:?}"/unix.sh
|
. "${dist}"/../src/scripts/common.sh
|
||||||
. "${scripts:?}"/tools/brew.sh
|
|
||||||
. "${scripts:?}"/tools/retry.sh
|
|
||||||
. "${scripts:?}"/tools/add_tools.sh
|
|
||||||
. "${scripts:?}"/extensions/source.sh
|
|
||||||
. "${scripts:?}"/extensions/add_extensions.sh
|
|
||||||
configure_brew
|
|
||||||
read_env
|
read_env
|
||||||
self_hosted_setup
|
self_hosted_setup
|
||||||
setup_php
|
setup_php
|
||||||
|
|||||||
@@ -10,20 +10,14 @@ Function Add-Blackfire() {
|
|||||||
$no_dot_version = $version.replace('.', '')
|
$no_dot_version = $version.replace('.', '')
|
||||||
$extension_version = $extension.split('-')[1]
|
$extension_version = $extension.split('-')[1]
|
||||||
if ($extension_version -notmatch "\S") {
|
if ($extension_version -notmatch "\S") {
|
||||||
if($version -lt '7.0') {
|
|
||||||
$extension_version = '1.50.0'
|
|
||||||
} else {
|
|
||||||
$extension_version = (Invoke-RestMethod https://blackfire.io/api/v1/releases).probe.php
|
$extension_version = (Invoke-RestMethod https://blackfire.io/api/v1/releases).probe.php
|
||||||
}
|
}
|
||||||
}
|
|
||||||
if (Test-Path $ext_dir\blackfire.dll) {
|
if (Test-Path $ext_dir\blackfire.dll) {
|
||||||
Enable-PhpExtension -Extension blackfire -Path $php_dir
|
Enable-PhpExtension -Extension blackfire -Path $php_dir
|
||||||
$status="Enabled"
|
$status="Enabled"
|
||||||
} else {
|
} else {
|
||||||
$nts = if (!$installed.ThreadSafe) { "_nts" } else { "" }
|
$nts = if (!$installed.ThreadSafe) { "_nts" } else { "" }
|
||||||
Get-File -Url "https://packages.blackfire.io/binaries/blackfire-php/${extension_version}/blackfire-php-windows_${arch}-php-${no_dot_version}${nts}.dll" -OutFile $ext_dir\blackfire.dll > $null 2>&1
|
Invoke-WebRequest -Uri "https://packages.blackfire.io/binaries/blackfire-php/${extension_version}/blackfire-php-windows_${arch}-php-${no_dot_version}${nts}.dll" -OutFile $ext_dir\blackfire.dll > $null 2>&1
|
||||||
Disable-Extension xdebug > $null 2>&1
|
|
||||||
Disable-Extension pcov > $null 2>&1
|
|
||||||
Enable-PhpExtension -Extension blackfire -Path $php_dir
|
Enable-PhpExtension -Extension blackfire -Path $php_dir
|
||||||
$status="Installed and enabled"
|
$status="Installed and enabled"
|
||||||
}
|
}
|
||||||
17
src/scripts/ext/blackfire.sh
Normal file
17
src/scripts/ext/blackfire.sh
Normal file
@@ -0,0 +1,17 @@
|
|||||||
|
# Function to install blackfire extension.
|
||||||
|
add_blackfire() {
|
||||||
|
extension=$1
|
||||||
|
version=${version:?}
|
||||||
|
no_dot_version=${version/./}
|
||||||
|
platform=$(uname -s | tr '[:upper:]' '[:lower:]')
|
||||||
|
extension_version=$(echo "$extension" | cut -d '-' -f 2)
|
||||||
|
blackfire_ini_file="${pecl_file:-${ini_file[@]}}"
|
||||||
|
if [ ! -e "${ext_dir:?}/blackfire.so" ]; then
|
||||||
|
if [ "$extension_version" = "blackfire" ]; then
|
||||||
|
extension_version=$(get -s -n "" https://blackfire.io/api/v1/releases | grep -Eo 'php":"([0-9]+.[0-9]+.[0-9]+)' | cut -d '"' -f 3)
|
||||||
|
fi
|
||||||
|
get -q -n "${ext_dir:?}/blackfire.so" https://packages.blackfire.io/binaries/blackfire-php/"$extension_version"/blackfire-php-"$platform"_amd64-php-"$no_dot_version".so >/dev/null 2>&1
|
||||||
|
fi
|
||||||
|
echo "extension=blackfire.so" | sudo tee -a "$blackfire_ini_file" >/dev/null 2>&1
|
||||||
|
add_extension_log "$extension-$extension_version" "Installed and enabled"
|
||||||
|
}
|
||||||
42
src/scripts/ext/couchbase.sh
Normal file
42
src/scripts/ext/couchbase.sh
Normal file
@@ -0,0 +1,42 @@
|
|||||||
|
# Function to install libraries required by couchbase
|
||||||
|
add_couchbase_libs() {
|
||||||
|
if [ "$(uname -s)" = "Linux" ]; then
|
||||||
|
if [[ ${version:?} =~ 5.6|7.[0-1] ]]; then
|
||||||
|
trunk="http://packages.couchbase.com/ubuntu"
|
||||||
|
list="deb $trunk ${DISTRIB_CODENAME:?} ${DISTRIB_CODENAME:?}/main"
|
||||||
|
else
|
||||||
|
trunk="http://packages.couchbase.com/clients/c/repos/deb"
|
||||||
|
list="deb $trunk/ubuntu${DISTRIB_RELEASE/./} ${DISTRIB_CODENAME:?} ${DISTRIB_CODENAME:?}/main"
|
||||||
|
fi
|
||||||
|
add_pecl
|
||||||
|
get -s -n "" "$trunk/couchbase.key" | sudo apt-key add
|
||||||
|
echo "$list" | sudo tee /etc/apt/sources.list.d/couchbase.list
|
||||||
|
sudo apt-get update
|
||||||
|
${apt_install:?} libcouchbase-dev
|
||||||
|
else
|
||||||
|
if [[ ${version:?} =~ 5.6|7.[0-1] ]]; then
|
||||||
|
brew install libcouchbase@2
|
||||||
|
brew link --overwrite --force libcouchbase@2
|
||||||
|
else
|
||||||
|
brew install libcouchbase
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
# Function to add couchbase.
|
||||||
|
add_couchbase() {
|
||||||
|
add_couchbase_libs >/dev/null 2>&1
|
||||||
|
enable_extension "couchbase" "extension"
|
||||||
|
if check_extension "couchbase"; then
|
||||||
|
add_log "${tick:?}" "couchbase" "Enabled"
|
||||||
|
else
|
||||||
|
if [[ ${version:?} =~ 5.6|7.[0-1] ]]; then
|
||||||
|
pecl_install couchbase-2.6.2 >/dev/null 2>&1
|
||||||
|
elif [[ ${version:?} =~ 7.2 ]]; then
|
||||||
|
pecl_install couchbase-3.0.4 >/dev/null 2>&1
|
||||||
|
else
|
||||||
|
pecl_install couchbase >/dev/null 2>&1
|
||||||
|
fi
|
||||||
|
add_extension_log "couchbase" "Installed and enabled"
|
||||||
|
fi
|
||||||
|
}
|
||||||
@@ -1,10 +1,10 @@
|
|||||||
# Function to log license details.
|
# Function to log license details.
|
||||||
add_license_log() {
|
add_license_log() {
|
||||||
printf "$GROUP\033[34;1m%s \033[0m\033[90;1m%s \033[0m\n" "$ext" "Click to read the $ext related license information"
|
printf "::group::\033[34;1m%s \033[0m\033[90;1m%s \033[0m\n" "$ext" "Click to read the $ext related license information"
|
||||||
printf "Cubrid CCI package is required for %s extension.\n" "$ext"
|
printf "Cubrid CCI package is required for %s extension.\n" "$ext"
|
||||||
printf "The extension %s and Cubrid CCI are provided under the license linked below.\n" "$ext"
|
printf "The extension %s and Cubrid CCI are provided under the license linked below.\n" "$ext"
|
||||||
printf "Refer to: \033[35;1m%s \033[0m\n" "https://github.com/CUBRID/cubrid-cci/blob/develop/COPYING"
|
printf "Refer to: \033[35;1m%s \033[0m\n" "https://github.com/CUBRID/cubrid-cci/blob/develop/COPYING"
|
||||||
echo "$END_GROUP"
|
echo "::endgroup::"
|
||||||
}
|
}
|
||||||
|
|
||||||
# Function to set cubrid repo for the extension.
|
# Function to set cubrid repo for the extension.
|
||||||
@@ -30,11 +30,15 @@ add_cubrid_helper() {
|
|||||||
status='Installed and enabled'
|
status='Installed and enabled'
|
||||||
set_cubrid_repo
|
set_cubrid_repo
|
||||||
set_cubrid_branch
|
set_cubrid_branch
|
||||||
patch_phpize
|
(
|
||||||
read -r "${ext}_PREFIX_CONFIGURE_OPTS" <<< "CFLAGS=-Wno-implicit-function-declaration"
|
git clone -b "$cubrid_branch" --recursive "https://github.com/CUBRID/$cubrid_repo" "/tmp/$cubrid_repo"
|
||||||
read -r "${ext}_CONFIGURE_OPTS" <<< "--with-php-config=$(command -v php-config)"
|
cd "/tmp/$cubrid_repo" || exit
|
||||||
add_extension_from_source "$ext" https://github.com CUBRID "$cubrid_repo" "$cubrid_branch" extension
|
! [[ "$version" =~ ${old_versions:?} ]] && add_devtools
|
||||||
restore_phpize
|
phpize && ./configure --with-php-config="$(command -v php-config)" --with-"${ext/_/-}"=shared
|
||||||
|
make -j"$(nproc)"
|
||||||
|
sudo make install
|
||||||
|
)
|
||||||
|
echo "extension=$ext.so" | sudo tee "${scan_dir:?}/$ext.ini"
|
||||||
fi
|
fi
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -46,6 +50,3 @@ add_cubrid() {
|
|||||||
add_extension_log "$ext" "$status"
|
add_extension_log "$ext" "$status"
|
||||||
check_extension "$ext" && add_license_log
|
check_extension "$ext" && add_license_log
|
||||||
}
|
}
|
||||||
|
|
||||||
# shellcheck source=.
|
|
||||||
. "${scripts:?}"/extensions/patches/phpize.sh
|
|
||||||
23
src/scripts/ext/gearman.sh
Normal file
23
src/scripts/ext/gearman.sh
Normal file
@@ -0,0 +1,23 @@
|
|||||||
|
# Helper function to add gearman extension.
|
||||||
|
add_gearman_helper() {
|
||||||
|
sudo "${debconf_fix:?}" add-apt-repository ppa:ondrej/pkg-gearman -y
|
||||||
|
if [ -e "${ext_dir:?}/gearman.so" ] && [ "$DISTRIB_RELEASE" != "16.04" ]; then
|
||||||
|
${apt_install:?} libgearman-dev
|
||||||
|
echo "extension=gearman.so" | sudo tee -a "${scan_dir:?}/20-gearman.ini" >/dev/null 2>&1
|
||||||
|
else
|
||||||
|
status="Installed and enabled"
|
||||||
|
if [ "$DISTRIB_RELEASE" = "16.04" ]; then
|
||||||
|
sudo "${debconf_fix:?}" apt-get update -y
|
||||||
|
${apt_install:?} php"${version:?}"-gearman
|
||||||
|
else
|
||||||
|
${apt_install:?} libgearman-dev php"${version:?}"-gearman
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
# Function to add gearman extension.
|
||||||
|
add_gearman() {
|
||||||
|
status="Enabled"
|
||||||
|
add_gearman_helper >/dev/null 2>&1
|
||||||
|
add_extension_log "gearman" "$status"
|
||||||
|
}
|
||||||
51
src/scripts/ext/geos.sh
Normal file
51
src/scripts/ext/geos.sh
Normal file
@@ -0,0 +1,51 @@
|
|||||||
|
# Helper function install geos library and headers
|
||||||
|
add_geos_libs() {
|
||||||
|
if [ "$(uname -s)" = "Darwin" ]; then
|
||||||
|
brew install geos
|
||||||
|
else
|
||||||
|
sudo apt-get install libgeos-dev
|
||||||
|
if [ "${runner:?}" = "self-hosted" ]; then
|
||||||
|
${apt_install:?} --no-upgrade --no-install-recommends autoconf automake gcc g++
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
# Patch geos for PHP 7
|
||||||
|
patch_geos() {
|
||||||
|
if [ "$(php -r "echo PHP_VERSION_ID;")" -ge 70000 ]; then
|
||||||
|
sed -i~ -e "s/, ce->name/, ZSTR_VAL(ce->name)/; s/ulong /zend_ulong /" /tmp/php-geos-"$geos_tag"/geos.c
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
# Get geos source
|
||||||
|
get_geos() {
|
||||||
|
curl -o /tmp/geos.tar.gz -sL https://github.com/libgeos/php-geos/archive/"$geos_tag".tar.gz
|
||||||
|
tar -xzf /tmp/geos.tar.gz -C /tmp
|
||||||
|
patch_geos
|
||||||
|
}
|
||||||
|
|
||||||
|
# Helper function to compile and install geos
|
||||||
|
add_geos_helper() {
|
||||||
|
get_geos
|
||||||
|
(
|
||||||
|
cd /tmp/php-geos-"$geos_tag" || exit
|
||||||
|
phpize
|
||||||
|
./configure --enable-geos --with-geos-config="$(command -v geos-config)"
|
||||||
|
sudo make -j"$(nproc)"
|
||||||
|
sudo make install
|
||||||
|
enable_extension geos extension
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
|
# Function to add geos
|
||||||
|
add_geos() {
|
||||||
|
geos_tag='1.0.0'
|
||||||
|
add_geos_libs >/dev/null 2>&1
|
||||||
|
enable_extension "geos" "extension"
|
||||||
|
if check_extension "geos"; then
|
||||||
|
add_log "${tick:?}" "geos" "Enabled"
|
||||||
|
else
|
||||||
|
add_geos_helper >/dev/null 2>&1
|
||||||
|
add_extension_log "geos" "Installed and enabled"
|
||||||
|
fi
|
||||||
|
}
|
||||||
23
src/scripts/ext/intl.sh
Normal file
23
src/scripts/ext/intl.sh
Normal file
@@ -0,0 +1,23 @@
|
|||||||
|
# Function to install ICU
|
||||||
|
install_icu() {
|
||||||
|
icu=$1
|
||||||
|
if [ "$(php -i | grep "ICU version =>" | sed -e "s|.*=> s*||")" != "$icu" ]; then
|
||||||
|
get -q -n /tmp/icu.tar.zst "https://dl.bintray.com/shivammathur/icu4c/icu4c-$icu.tar.zst"
|
||||||
|
sudo tar -I zstd -xf /tmp/icu.tar.zst -C /usr/local
|
||||||
|
sudo cp -r /usr/local/icu/lib/* /usr/lib/x86_64-linux-gnu/
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
# Function to add ext-intl with the given version of ICU
|
||||||
|
add_intl() {
|
||||||
|
icu=$(echo "$1" | cut -d'-' -f 2)
|
||||||
|
supported_version=$(get -s -n "" https://api.bintray.com/packages/shivammathur/icu4c/icu4c | grep -Po "$icu" | head -n 1)
|
||||||
|
if [ "$icu" != "$supported_version" ]; then
|
||||||
|
add_log "${cross:?}" "intl" "ICU $icu is not supported"
|
||||||
|
else
|
||||||
|
install_icu "$icu" >/dev/null 2>&1
|
||||||
|
get -q -n "${ext_dir:?}/intl.so" "https://dl.bintray.com/shivammathur/icu4c/php${version:?}-intl-$icu.so"
|
||||||
|
enable_extension intl extension
|
||||||
|
add_extension_log intl "Installed and enabled with ICU $icu"
|
||||||
|
fi
|
||||||
|
}
|
||||||
@@ -1,14 +1,13 @@
|
|||||||
# Function to log result of a operation.
|
# Function to log result of a operation.
|
||||||
Function Add-LicenseLog() {
|
Function Add-LicenseLog() {
|
||||||
printf "$env:GROUP\033[34;1m%s \033[0m\033[90;1m%s \033[0m\n" "ioncube" "Click to read the ioncube loader license information"
|
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
|
Get-Content $ext_dir\ioncube\LICENSE.txt
|
||||||
Write-Output "$env:END_GROUP"
|
Write-Output "::endgroup::"
|
||||||
}
|
}
|
||||||
|
|
||||||
# Function to add ioncube extension.
|
# Function to add ioncube extension.
|
||||||
Function Add-Ioncube() {
|
Function Add-Ioncube() {
|
||||||
try {
|
try {
|
||||||
$status = 'Enabled'
|
|
||||||
if (-not(Test-Path $ext_dir\php_ioncube.dll)) {
|
if (-not(Test-Path $ext_dir\php_ioncube.dll)) {
|
||||||
$status = 'Installed and enabled'
|
$status = 'Installed and enabled'
|
||||||
$arch_part = $arch
|
$arch_part = $arch
|
||||||
@@ -20,7 +19,7 @@ Function Add-Ioncube() {
|
|||||||
if (-not($installed.ThreadSafe)) {
|
if (-not($installed.ThreadSafe)) {
|
||||||
$ts_part = "_nonts"
|
$ts_part = "_nonts"
|
||||||
}
|
}
|
||||||
Get-File -Url "https://downloads.ioncube.com/loader_downloads/ioncube_loaders_win$ts_part`_vc$vc`_$arch_part.zip" -OutFile $ext_dir\ioncube.zip
|
Invoke-WebRequest -Uri "https://downloads.ioncube.com/loader_downloads/ioncube_loaders_win$ts_part`_vc$vc`_$arch_part.zip" -OutFile $ext_dir\ioncube.zip
|
||||||
Expand-Archive -Path $ext_dir\ioncube.zip -DestinationPath $ext_dir -Force
|
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
|
Copy-Item $ext_dir\ioncube\ioncube_loader_win_$version.dll $ext_dir\php_ioncube.dll
|
||||||
}
|
}
|
||||||
19
src/scripts/ext/ioncube.sh
Normal file
19
src/scripts/ext/ioncube.sh
Normal file
@@ -0,0 +1,19 @@
|
|||||||
|
# Function to log result of a operation.
|
||||||
|
add_license_log() {
|
||||||
|
printf "::group::\033[34;1m%s \033[0m\033[90;1m%s \033[0m\n" "ioncube" "Click to read the ioncube loader license information"
|
||||||
|
cat /tmp/ioncube/LICENSE.txt
|
||||||
|
echo "::endgroup::"
|
||||||
|
}
|
||||||
|
|
||||||
|
# Function to install ioncube.
|
||||||
|
add_ioncube() {
|
||||||
|
if [ ! -e "${ext_dir:?}/ioncube.so" ]; then
|
||||||
|
status='Installed and enabled'
|
||||||
|
os_name='lin' && [ "$(uname -s)" = "Darwin" ] && os_name='mac'
|
||||||
|
get -s -n "" https://downloads.ioncube.com/loader_downloads/ioncube_loaders_"$os_name"_x86-64.tar.gz | tar -xzf - -C /tmp
|
||||||
|
sudo mv /tmp/ioncube/ioncube_loader_"$os_name"_"${version:?}".so "$ext_dir/ioncube.so"
|
||||||
|
fi
|
||||||
|
echo "zend_extension=$ext_dir/ioncube.so" | sudo tee "${scan_dir:?}/00-ioncube.ini" >/dev/null 2>&1
|
||||||
|
add_extension_log "ioncube" "$status"
|
||||||
|
check_extension "ioncube" && add_license_log
|
||||||
|
}
|
||||||
58
src/scripts/ext/oci.ps1
Normal file
58
src/scripts/ext/oci.ps1
Normal file
@@ -0,0 +1,58 @@
|
|||||||
|
# Function to log license information.
|
||||||
|
Function Add-LicenseLog() {
|
||||||
|
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::"
|
||||||
|
}
|
||||||
|
|
||||||
|
# Function to get instantclinet.
|
||||||
|
Function Add-InstantClient() {
|
||||||
|
if (-not(Test-Path $php_dir\oci.dll)) {
|
||||||
|
$suffix = 'windows'
|
||||||
|
if ($arch -eq 'x86') {
|
||||||
|
$suffix = 'nt'
|
||||||
|
}
|
||||||
|
Invoke-WebRequest -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
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
# Function to install oci8 and pdo_oci.
|
||||||
|
Function Add-Oci() {
|
||||||
|
Param (
|
||||||
|
[Parameter(Position = 0, Mandatory = $true)]
|
||||||
|
[ValidateNotNull()]
|
||||||
|
[ValidateSet('oci8', 'pdo_oci')]
|
||||||
|
[string]
|
||||||
|
$extension
|
||||||
|
)
|
||||||
|
try {
|
||||||
|
$status = 'Enabled'
|
||||||
|
Add-InstantClient
|
||||||
|
if ($extension -eq "pdo_oci") {
|
||||||
|
Enable-PhpExtension pdo_oci -Path $php_dir
|
||||||
|
} else {
|
||||||
|
if(-not(Test-Path $ext_dir\php_oci8.dll)) {
|
||||||
|
$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 -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
|
||||||
|
Add-LicenseLog
|
||||||
|
} catch {
|
||||||
|
Add-Log $cross $extension "Could not install $extension on PHP $( $installed.FullVersion )"
|
||||||
|
}
|
||||||
|
}
|
||||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user